hamcrest containsInAnyOrder仅适用于特定订单

Stefaan Dutry:

我正在尝试进行测试,以检查某个列表中是否包含项目,而我并不关心订单。
我希望能够执行此操作的方法是通过测试项目具有具有特定值的特定属性。

我用以下代码隔离了senario:

我正在使用的课程:

public class A {
    private String propA;

    public A (final String propA) {
        this.propA = propA;
    }

    public String getPropA() {
        return propA;
    }

    public void setPropA(final String propA) {
        this.propA = propA;
    }
}

测试类

import static org.hamcrest.MatcherAssert.assertThat;
import static org.hamcrest.Matchers.equalTo;
import static org.hamcrest.beans.HasPropertyWithValue.hasProperty;
import static org.hamcrest.collection.IsIterableContainingInAnyOrder.containsInAnyOrder;

import java.util.ArrayList;
import java.util.List;

import org.junit.Test;

public class HamcrestCollectionTest {
    @Test
    public void testContainsInAnyOrder() {
        List<A> list = new ArrayList<A>();

        list.add(new A("a"));
        list.add(new A("b"));

        assertThat(list, containsInAnyOrder(hasProperty("propA", equalTo("b")), hasProperty("propA", equalTo("a"))));
    }
}

该测试失败。如果我在countainsInAnyOrder内部切换列表的值,则可以使用。这与我对“ containsInAnyOrder”的期望并不完全相同。

正确的方法是什么?
还是有办法检查各个值是否存在?

Stefaan Dutry:

我发现了问题所在。确实是引起问题的hamcrest类的一个版本。

采取的步骤:

  1. 更新了maven-dependency-plugin的版本
  2. 将我的模仿依赖从所有模仿更改为模仿核心
    • 原因:
      • 完全模拟依赖项直接包含类org.hamcrest.Matcher的版本
      • 当您查看要加载的依赖项时,这不是简单可见的(因为它是在所有mitoto- jar本身中,而不是在jar的依赖项中。
  3. dependencyManagement中将hamcrest-core的版本设置1.3
    • 原因:
      • mockito-core具有hamcrest-core的依赖关系,但使用版本1.1
      • 的Mockito核心的版本hamcrest核心得到了优先于JUnit的的版本hamcrest核心的依赖。

因此,从根本上讲,这是由使用mockito-all引起的冲突

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

在Hamcrest中进行的测试仅包含具有特定属性的列表中的一项

Hamcrest匹配器,用于检查集合中方法的返回值

如何在Hamcrest Matcher中将Class <?>与特定的Class实例进行匹配?

Hamcrest泛型地狱#2:iterableWithSize给出错误“不适用于参数”

Hamcrest。使用2个特定属性值匹配集合中的项目

Hamcrest的hasItems,contains和containsInAnyOrder有何不同?

JUnit和hamcrest:containsInAnyOrder()可以进一步说明不匹配吗?

Hamcrest匹配器用于子列表/部分匹配?

NVActivityIndicatorView仅适用于特定视图

将AssertJ与Hamcrest等价(仅适用于Spring MVC测试):如何测试集合中的每个POJO项(带有日期)

R-使用仅适用于特定列

Hamcrest containsInAnyOrder如果字符串包含则匹配

Hamcrest:测试列表包含一个具有特定值的私有字段的项目

边缘(关系)仅适用于特定用户

WooCommerce更改链接颜色仅适用于特定链接

如何使重复按钮仅适用于特定的div

RAM仅适用于特定的插槽/顺序

htaccess:仅适用于特定IP的文件访问

单击功能仅适用于特定跨度

Mikrotik和VPN仅适用于特定网站

使表单的onsubmit仅适用于特定提交者

仅适用于特定NFC标签的应用程序

客户证书-但仅适用于使用haproxy的特定路由

悬停效果仅适用于特定的div

重写规则仅适用于特定的用户代理?

For 循环仅适用于特定值

Vue:仅适用于特定页面的组件

Postgres TDE 功能仅适用于特定模式

urequests 仅适用于特定网站