TestNG vs Spock for Automation



我们正在考虑实现一个测试框架,并对使用哪个框架感到好奇。我们正在测试和Spock之间进行选择。这将是一个UI自动化框架,因此它应该处理尽可能少的模拟数据。我们的代码库将由GEB(Groovy)组成。

话虽如此,Spock比Testng具有3个优点:

详细信息Spock的运行时收集了大量信息,并在需要时向您介绍。 条件不满足:

max(a, b) == c
|   |  |  |  |
3   1  3  |  2
          false

美丽的语言用美丽而高度表达的规范语言表达您的想法。

def "subscribers receive published events at least once"() {
    when: publisher.send(event)
    then: (1.._) * subscriber.receive(event)
    where: event << ["started", "paused", "stopped"]
}

每个人都可以扩展@交易?@springbean?@DeployApp?使用Spock的基于拦截的扩展机制,您可以轻松创建自己的扩展。

有人对为什么一个人可能比另一个更好?

有任何意见吗?

是否有倒下?

有没有一种方法可以在Testng的报告中创建"美丽的语言"?从本质上讲,我可以创建自己的标签并拥有为它们解析的程序吗?还是已经有第三方库添加?

对于UI自动化,请在尝试构建新框架之前先查看GEB。http://www.gebish.org

GEB将与Spock和testng一起使用。

总的来说,我在Spock方面确实有很好的经验,但不能与Testng说话。

我确实希望Spock拥有BDD样式报告,例如Cucumber和Scalacheck等物业样式测试,但是就TDD风格的直接测试而言,Spock具有表现力,易于使用,易于使用,功能丰富且设计良好。与Junit这样的事情相比,Spock是一个欢乐 - 几乎不需要仪式。

我正在使用TestNG几年,几个项目,我对此感到非常满意。回答您的问题

美丽的语言

测试方法名称必须是有效的Java方法名称。这意味着没有空间。我用应该开始我的方法,因此我将您的方法subscribers receive published events at least once命名为shouldSubscrbersReceiveEvents。我相信这个较短的名字描述了意图足够好。骆驼案的名称不像适当的句子那样可读,但我没有其他选择。

何时到达部分

testng没有建立功能可以支持这一点。我正在手动使用评论。没有以下功能的框架支持:

  • 来自where:部分的参数。您可以使用@DataProviders
  • then:部分中语句的断言。您必须自己编写断言(assertThat)。

我的样本测试:

 public void shouldUnmarshalDataHeader() throws IOException {
        //given DataHeader unmarshalled from InputStream
        DataHeader actual = sut.parseDataHeader(stringToInputStream(BINARY_DATA_HEADER));
        //when we create DataHeader using java API
        DataHeader expected = DataHeaderBuilder
            .sampleInstance(sut.dateTimeProvider.getLocalDateTime());
        //then those two objects are equal
        Assertions.assertThat(actual).isEqualTo(expected);
    }

详细信息

此功能属于断言库,而不是测试库。Testng具有建立断言库,但您可以使用任何其他库。对我来说,https://joel-costigliola.github.io/assertj/效果最好。断言消息比普通测试或Junit的声明更好。Assertj提供流利的API。学习曲线很少。

当您拥有import static org.assertj.core.api.Assertions.*;时,只需键入assertThat(something).,而IDE的代码将指导您。您使用的断言更好,测试的可读性越多,您将收到的错误消息更好。

扩展

Spring对Testng有建立支持。您的测试必须扩展AbstractTestNGSpringContextTestsAbstractTransactionalTestNGSpringContextTests。然后,您可以将任何春季上下文,@Autowire春季bean加载到测试中,使用交易。

请参阅http://docs.spring.io/spring/docs/current/spring-framework-reference/html/integration-testing.html#testcontcontcontext-support-colport-clesses-classes-classes-classes-testng

摘要

对我来说,测试效果很好。您可以使用SPOCK测试您能够测试的所有内容。由于Testng是纯Java,因此编写测试的DSL不会像Spock中的Groovy那样丰富。但是我相信,testng assertj的学习曲线比SPOCK(对于Java开发人员)更顺畅。如果某人对学习兴趣感兴趣(也许您也想将Groovy用于生产代码?),那么Spock是很好的选择,值得一开始就进行学习。

对于学习测试,我强烈建议您使用Testng和Mockito'(http://practicalunittesting.com/)和'下一代Java测试:测试和高级概念'(http://testng.org/doc/book.html)。

更新2018年10月

上面的帖子是在2016年撰写的。目前,我们有Junit5。Junit5缩小Junit4和Testng之间的差距。在几个地方,Junit5比TestNG更富含功能(示例:更好地支持参数化的测试方法)。

我在几个商业项目中使用了junit5,我对此感到满意。

junit5仍然是纯java,因此,当时与Spock一样好的主张或断言时,没有语言级别的支持。我仍然使用AssertJ和其他一些伴侣工具(例如:https://github.com/awaitility/awaitility/awaitility进行测试异步操作)

相关内容

  • 没有找到相关文章

最新更新