当前位置: 首页 > 知识库问答 >
问题:

JUnit Hamcrest断言

周苑博
2023-03-14

有没有HamcrestMatcher可以让我明确断言,返回对象的Collection的方法的结果至少有一个对象包含具有特定值的属性?

例如:

class Person {
   private String name;
}

测试下的方法返回一个Person的集合。我需要断言至少有一个人叫彼得。

共有1个答案

南宫炜
2023-03-14

首先,您需要创建一个可以匹配姓名的匹配器。然后,您可以使用hamcrest的CoreMatchers#hasItem检查集合是否有此mathcer匹配的项目。

就我个人而言,我喜欢在static方法中将此类匹配器匿名声明为一种语法糖化:

public class PersonTest {

    /** Syntactic sugaring for having a hasName matcher method */
    public static Matcher<Person> hasName(final String name) {
        return new BaseMatcher<Person>() {
            public boolean matches(Object o) {
               return  ((Person) o).getName().equals(name);
            }

            public void describeTo(Description description) {
                description.appendText("Person should have the name ")
                           .appendValue(name);
            }
        };
    }

    @Test
    public void testPeople() {
        List<Person> people = 
            Arrays.asList(new Person("Steve"), new Person("Peter"));

        assertThat(people, hasItem(hasName("Peter")));
    }
}
 类似资料:
  • 问题内容: 今天,我看到了一个带有Java断言而不是JUnit断言的JUnit测试用例-相对于另一个而言,优先选择一个优点还是缺点? 问题答案: 在JUnit4中,JUnit断言引发的异常(实际上是Error)与java 关键字(AssertionError)引发的错误相同,因此它与堆栈跟踪完全相同,除了您无法分辨出其区别。 话虽这么说,断言必须在JVM中使用特殊标志运行,导致许多测试似乎通过了,

  • mocha允许你使用任意你喜欢的断言库,在上面的例子中,我们使用了Node.js的内置的断言模块作为断言。如果能够抛出一个错误,它就能够运行。这意味着你能使用下面的这些仓库,比如: should.js - BDD风格贯穿始终 expect.js - expect()样式断言 chai - expect(),assert()和should风格的断言 better-assert - C风格的自文档化的

  • 在本教程的其余部分,您将看到使用不同类型的断言(如BOOST_HANA_RUNTIME_CHECK和BOOST_HANA_CONSTANT_CHECK)的代码段。 像任何合理的assert宏,它们基本上检查它们给出的条件是否满足。 然而,在异构编程的上下文中,一些信息在编译时是已知的,而其他信息仅在运行时可知。 在上下文中使用的断言的确切类型告诉您所声明的条件是否可以在编译时可知,或者是否必须在运

  • 有时候我们需要匹配后面跟着特定模式的一段模式。比如,我们要从 1 turkey costs 30€ 这段字符中匹配价格数值。 我们需要获取 € 符号前面的数值(假设价格是整数)。 那就是前瞻断言要做的事情。 前瞻断言 语法为:x(?=y),它表示 “匹配 x, 仅在后面是 y 的情况"” 那么对于一个后面跟着 € 的整数金额,它的正则表达式应该为:\d+(?=€)。 let str = "1 tu

  • 本文向大家介绍Kotlin 断言,包括了Kotlin 断言的使用技巧和注意事项,需要的朋友参考一下 示例 !!后缀忽略可空性,并返回该类型的非空版本。KotlinNullPointerException如果对象是,则将抛出该异常null。            

  • 稳定性: 2 - 稳定的 assert 模块提供了一组简单的断言测试集合,可被用于测试不变式。 assert(value[, message]) 新增于: v0.5.9 value <any> message <any> assert.ok() 的别名。 assert.deepEqual(actual, expected[, message]) 版本历史 版本 变更 v8.0.0 Set and

  • JUnit Jupiter提供了许多JUnit4已有的断言方法,并增加了一些适合与Java 8 lambda一起使用的断言方法。所有JUnit Jupiter断言都是org.junit.jupiter.Assertions类中的静态方法。 import static java.time.Duration.ofMillis; import static java.time.Duration.ofMi

  • 由来 Java中有assert关键字,但是存在许多问题: assert关键字需要在运行时候显式开启才能生效,否则你的断言就没有任何意义。 用assert代替if是陷阱之二。assert的判断和if语句差不多,但两者的作用有着本质的区别:assert关键字本意上是为测试调试程序时使用的,但如果不小心用assert来控制了程序的业务流程,那在测试调试结束后去掉assert关键字就意味着修改了程序的正常