【问题标题】:Hamcrest Pattern Assert 2 Properties of Custom CollectionHamcrest 模式断言 2 自定义集合的属性
【发布时间】:2018-02-03 17:17:40
【问题描述】:

我有一个带有两 (2) 个属性的 Java 自定义对象集合 List<Employee>。它作为 Web 服务的响应接收。对象看起来像

public class Employee{
   public String getName(){ ... }
   public String getDesignation(){ ... }
}

我需要写一个断言来检查员工的名字是否是David,那么它的名称必须是Manager。我是这样试的

assertThat(employeeList, allOf(hasItem(hasProperty("name", equalTo("David"))) , hasItem(hasProperty("designation", equalTo("Manager")))));

但如果至少有一个 Manager 实例和一个 David,它就会通过。我的要求是在单个实例上应用这两项检查。

请帮忙。

【问题讨论】:

    标签: java junit4 hamcrest assertthat


    【解决方案1】:

    给定一个班级Foo

    public class Foo {
        private String name;
        private String designation;
    
        public Foo(String name, String designation) {
            this.name = name;
            this.designation = designation;
        }
    
        public String getName() {
            return name;
        }
    
        public void setName(String name) {
            this.name = name;
        }
    
        public String getDesignation() {
            return designation;
        }
    
        public void setDesignation(String designation) {
            this.designation = designation;
        }
    }
    

    还有一个自定义的 Hamcrest 匹配器:

    private static class FooMatcher extends BaseMatcher<List<Foo>> {
        public String name;
        public String designation;
    
        public static FooMatcher matches(String name, String designation) {
            return new FooMatcher(name, designation);
        }
    
        private FooMatcher(String name, String designation) {
            this.name = name;
            this.designation = designation;
        }
    
        @Override
        public boolean matches(Object item) {
            Foo foo = (Foo) item;
            return foo.getName().equals(name) && foo.getDesignation().equals(designation);
        }
    
        @Override
        public void describeTo(Description description) {
            // this is a quick impl, you'll probably want to fill this in!
        }
    }
    

    此测试将通过:

    @Test
    public void canAssertOnMultipleFooAttributes() {
        List<Foo> incoming = Lists.newArrayList(new Foo("bill", "sir"), new Foo("bob", "mr"), new Foo("joe", "mr"));
        assertThat(incoming, hasItem(FooMatcher.matches("bob", "mr")));
    }
    

    【讨论】:

      猜你喜欢
      • 2018-08-14
      • 1970-01-01
      • 1970-01-01
      • 2012-02-18
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-07-09
      • 1970-01-01
      相关资源
      最近更新 更多