为了账号安全,请及时绑定邮箱和手机立即绑定

Junit5 TestReporter

Junit5 TestReporter

绝地无双 2021-10-13 10:15:48
我试图了解 Junit5 中的 TestReporter@BeforeEachvoid beforeEach(TestInfo testInfo) {}@ParameterizedTest@ValueSource(strings = "foo")void testWithRegularParameterResolver(String argument, TestReporter testReporter) {    testReporter.publishEntry("argument", argument);}@AfterEachvoid afterEach(TestInfo testInfo) {    // ...}有什么用的publishEntry在TestReporter,有人可以解释我.. 提前致谢..
查看完整描述

3 回答

?
qq_花开花谢_0

TA贡献1835条经验 获得超7个赞

“TestReporter”与“TestInfo”一起给出了当前测试的一个实例,这样您就可以获得有关实际测试的信息。然后发布它,在这个例子中用作一种记录器。


StringBuffer 用于测试所需的可变、快速和同步特性。


public class TestReporterTest {

    StringBuffer sbtags = new StringBuffer();

    StringBuffer displayName = new StringBuffer();

    StringBuffer className = new StringBuffer();

    StringBuffer methodName = new StringBuffer();


    @BeforeEach

    void init(TestInfo testInfo) {

        className.delete( 0, className.length());

        className.append( testInfo.getTestClass().get().getName());

        displayName.delete( 0, displayName.length());

        displayName.append( testInfo.getDisplayName());

        methodName.delete( 0, methodName.length());

        methodName.append( testInfo.getTestMethod().get().getName());

    }


    @Test

    @DisplayName("testing on reportSingleValue")

    void reportSingleValue(TestReporter testReporter) {

        testReporter.publishEntry( "className  : " + className);

        testReporter.publishEntry( "displayName: " + displayName);

        testReporter.publishEntry("methodName  : " + methodName);

        testReporter.publishEntry("algun mensaje de estatus");

    }


    @Test

    void reportKeyValuePair(TestReporter testReporter) {

        testReporter.publishEntry( "className  : " + className);

        testReporter.publishEntry( "displayName: " + displayName);

        testReporter.publishEntry("methodName  : " + methodName);

        testReporter.publishEntry("una Key", "un Value");

    }


    @Test

    void reportMultiKeyValuePairs(TestReporter testReporter) {

        Map<String, String> map = new HashMap<>();

        map.put("Fast and Furious 8","2018");

        map.put("Matrix","1999");


        testReporter.publishEntry( "className  : " + className);

        testReporter.publishEntry( "displayName: " + displayName);

        testReporter.publishEntry("methodName  : " + methodName);

        testReporter.publishEntry(map);

    }

}

运行测试


timestamp = 2019-11-22T12:02:45.898, value = className  : TestReporterTest

timestamp = 2019-11-22T12:02:45.904, value = displayName: testing on reportSingleValue

timestamp = 2019-11-22T12:02:45.904, value = methodName  : reportSingleValue

timestamp = 2019-11-22T12:02:45.904, value = algun mensaje de estatus



timestamp = 2019-11-22T12:02:45.919, value = className  : TestReporterTest

timestamp = 2019-11-22T12:02:45.920, value = displayName: reportMultiKeyValuePairs(TestReporter)

timestamp = 2019-11-22T12:02:45.920, value = methodName  : reportMultiKeyValuePairs

timestamp = 2019-11-22T12:02:45.921, Fast and Furious 8 = 2018, Matrix = 1999



timestamp = 2019-11-22T12:02:45.924, value = className  : TestReporterTest

timestamp = 2019-11-22T12:02:45.925, value = displayName: reportKeyValuePair(TestReporter)

timestamp = 2019-11-22T12:02:45.925, value = methodName  : reportKeyValuePair

timestamp = 2019-11-22T12:02:45.925, una Key = un Value


查看完整回答
反对 回复 2021-10-13
?
繁花如伊

TA贡献2012条经验 获得超12个赞

除了前面的答案,当我们在编写 junit 测试脚本时,如果我们想从流程中获取一些信息,我们通常会执行 System.out.println,这在公司/企业世界中是不推荐的。特别是在代码审查、同行审查中,我们建议从代码库中删除所有 System.out.println。因此,在junit 世界中,如果我们想要推送或发布脚本,我们建议使用TestReporter publishEntry() 方法。通过结合TestInfo,我们可以从原始junit 脚本中读取一些信息。

希望这个事实也支持你的问题。


查看完整回答
反对 回复 2021-10-13
  • 3 回答
  • 0 关注
  • 159 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信