混合 Hamcrest 和 TestNG

Posted

技术标签:

【中文标题】混合 Hamcrest 和 TestNG【英文标题】:Mixing Hamcrest and TestNG 【发布时间】:2010-11-08 17:51:27 【问题描述】:

是否有人将 Hamcrest 与 TestNG 集成,以便可以轻松地在 TestNG 断言中使用其匹配器?

【问题讨论】:

【参考方案1】:

如果您遇到空方法的问题,那么我建议在依赖列表中首先添加hamcrest。或者先导入hamcrest,就可以解决问题了。

我正在使用带有 rexsl 的 TestNJ(内部使用 Hamcrest),但它找不到空方法。 然后我首先在依赖列表中添加了 rexsl,如果您在类路径中添加库,您可以尝试先添加 Hamcrest 。

希望它能帮助像我这样的人。

【讨论】:

【参考方案2】:

简而言之,回答您的问题:您不需要将 TestNG 与 Hamcrest 集成。直接调用org.hamcrest.MatcherAssert.assertThat(...) 会抛出java.lang.AssertionError

背景

我通过 Google 找到了您的问题,想知道完全相同的问题。在进一步谷歌搜索后,我没有找到任何令人满意的答案,所以我阅读了 JUnit 与 Hamcrest 集成的源代码。

对于 JUnit,Hamcrest 集成通常通过调用来使用:

org.junit.Assert.assertThat(
    T actual,
    org.hamcrest.Matcher<? super T> matcher)

当我阅读源代码时,我发现它只是一个可以调用的小包装器:

org.hamcrest.MatcherAssert.assertThat(
    String reason,
    T actual,
    org.hamcest.Matcher<? super T> matcher)

这个函数抛出java.lang.AssertionError

【讨论】:

这很好,除了 TestNG 有 soft assertions 不能从 Hamcrest 使用。 @Bass soft assertions 有一个解决方法【参考方案3】:

什么对我有用: 1.http://search.maven.org/

    搜索“java-hamcrest”,目前最新的是“2.0.0.0”

    找到 Gradle 的依赖项(在我的例子中)

    在我的项目中将 compile 'org.hamcrest:java-hamcrest:2.0.0.0' 添加到 build.gradle。

【讨论】:

以上是关于混合 Hamcrest 和 TestNG的主要内容,如果未能解决你的问题,请参考以下文章

[软件测试_LAB1]安装junit和hamcrest及其使用

软件测试实验——junit, hamcrest 和 eclemma的安装及使用

Junit,hamcrest,eclemma单元测试基础(java)

JUNIT,HAMCREST,ECLEMMA单元测试基础(JAVA)

软件测试之实验一——如何使用JUnit,Hamcrest和Eclemma进行简单的软件测试

软件测试第一次实验Junit ,Hamcrest 和 Eclemma 的配置 和 练习