【问题标题】:TestNG soft assertion output is not comprehensiveTestNG 软断言输出不全面
【发布时间】:2015-03-23 04:27:39
【问题描述】:

我在我的代码中使用了 TestNG 软断言。

public class AssertionTest{
  private SoftAssert softAssert = new SoftAssert();

    @Test(enabled = true)
    public void testSoftAssertion(){
        softAssert.assertTrue(false);
        softAssert.assertTrue(true); 
        softAssert.assertEquals("India", "US");

        softAssert.assertAll();
    }
}

当测试执行完成时,测试失败(如预期)但结果没有提供详细信息,而是提供如下信息,这无助于理解哪些断言失败。

FAILED: testSoftAssertion
java.lang.AssertionError: The following asserts failed:
null, null

我期待输出有助于理解结果的输出(这种类型的输出是在我们使用硬断言时生成的,即使用Assert 类)。

FAILED: testSoftAssertion
java.lang.AssertionError: The following asserts failed:
expected [true] but found [false]
expected [India] but found [US]

这是 TestNG 软断言的已知缺陷/缺点还是我遗漏了什么?

【问题讨论】:

    标签: java selenium-webdriver testng


    【解决方案1】:

    您需要在断言时提供失败消息,然后它将在报告中占用。考虑下面的代码 sn-p:

    import org.testng.annotations.Test;
    import org.testng.asserts.SoftAssert;
    
    public class SoftAsert
    {
        @Test
        public void test()
        {
            SoftAssert asert=new SoftAssert();
            asert.assertEquals(false, true,"failed");
            asert.assertEquals(0, 1,"brokedown");
            asert.assertAll();
        }
    }
    

    输出:

    FAILED: test
    java.lang.AssertionError: The following asserts failed:
    failed, brokedown
    

    这就是软断言的工作方式。目的是在失败的情况下显示错误消息。让我知道这是否有帮助。

    【讨论】:

    • 我注意到的问题是它将失败的断言全部输出在一行上。因此,如果您的文本不止一行,它看起来就不是很有用。我很好奇是否有办法进行格式化。
    • 我做的最好的方法是……扩展该课程并对其进行定制以满足我的需求,因为它不仅是关于格式化,而且更像是拍摄屏幕截图、记录(报告和其他地方)
    • 如果您发现此信息有用,请接受此作为答案,以便其他搜索类似查询的人可能会发现它有用
    • 评论更新;看起来最新版本的 TestNG 实际上正确格式化了输出。或者我在某处换行但没有意识到。
    • 它只在旧版本中将所有内容放在一行中。 TestNG 6.9.6 已经有 softAssert 可以在每次失败输出后生成下一行。比较grepcode.com/file/repo1.maven.org/maven2/org.testng/testng/…grepcode.com/file/repo1.maven.org/maven2/org.testng/testng/6.8/…
    【解决方案2】:

    不确定您是否解决了格式问题,但 TestNG 接受像 \n 这样的格式用于字符串中的新行(如在报告语句中)。尝试看看这些选项。

    【讨论】:

    • 这不是正确的编程方式。您应该重新加载 assertAll() 方法并在那里添加一个 \n\t,而不是在每条消息中插入 \n\t。或者使用新的 TestNG,已经纠正了这个问题,感谢作者。注意,\n 仅适用于 windows!
    • @Gangnus - 你知道任何代码示例,它显示了如何使软断言在不同的行而不是一行中显示失败?
    • @testerjoe2 这是另一个问题,也应该作为另一个问题放在这里。 (在旧问题中搜索后)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-20
    • 2019-04-29
    • 1970-01-01
    • 2013-01-02
    • 2013-09-16
    相关资源
    最近更新 更多