我正在使用Selenium,Java和TestNG编写测试。有时我在单元测试中使用了许多软断言,当他们失败时,TestNG记者没有显示他们发生的代码行。有什么办法可以让它显示出来吗?实际上,当我在报告上单击Failure Exception
它需要我s_assert.assertAll();
但我需要采取具体的线路,如:s_assert.assertEquals(Alert_text, "Hi.. is alert message!", "Alert Is InCorrect");
如何使TestNG报告显示软断言失败的行
回答
以下实现自定义软断言(我把它命名为检验器)应该做的你在问什么。
import org.testng.annotations.Test;
import org.testng.asserts.Assertion;
import org.testng.asserts.IAssert;
import org.testng.collections.Maps;
import java.util.Arrays;
import java.util.Map;
public class SoftAssertExample {
private Verifier verifier = new Verifier();
@Test
public void testMethod() {
verifier.assertEquals(false, true);
verifier.assertTrue(true);
verifier.assertAll();
}
/**
* A simple soft assertion mechanism that also captures the stacktrace to help pin point the source
* of failure.
*/
public static class Verifier extends Assertion {
private final Map<AssertionError, IAssert<?>> m_errors = Maps.newLinkedHashMap();
@Override
protected void doAssert(IAssert<?> a) {
onBeforeAssert(a);
try {
a.doAssert();
onAssertSuccess(a);
} catch (AssertionError ex) {
onAssertFailure(a, ex);
m_errors.put(ex, a);
} finally {
onAfterAssert(a);
}
}
public void assertAll() {
if (! m_errors.isEmpty()) {
StringBuilder sb = new StringBuilder("The following asserts failed:");
boolean first = true;
for (Map.Entry<AssertionError, IAssert<?>> ae : m_errors.entrySet()) {
if (first) {
first = false;
} else {
sb.append(",");
}
sb.append("\n\t");
sb.append(ae.getKey().getMessage());
sb.append("\nStack Trace :");
sb.append(Arrays.toString(ae.getKey().getStackTrace()).replaceAll(",", "\n"));
}
throw new AssertionError(sb.toString());
}
}
}
}
示例代码: s_assert.assertEquals(Alert_text, “嗨..是警报消息!”, “警报InCorrect1”); (Alert_text,“Hi .. is alert message!”,“Alert Is InCorrect2”); s_assert.assertEquals (Alert_text,“Hi .. is alert message!”,“Alert is InCorrect3”); s_assert.assertEquals (Alert_text,“Hi .. is alert message!”,“Alert is InCorrect4”); s_assert.assertEquals s_assert.assertall();
执行失败它指向(s_assert.assertall();)线后,平均一次显示了软断言失败.... 警报InCorrect2 警报InCorrect3
请检查输出消息。
它是否显示失败软声明的行数? –
它显示哪个软断言失败,其消息“Alert Is InCorrect2”; –
- 1. 在我的testNG报告中显示的API断言失败消息
- 2. “断言失败”警告
- 3. 重新运行失败的测试用例在testng报告中显示status ='Skipped'
- 4. TestNG中的硬和软断言
- 5. ShowWindow报告如何失败?
- 6. 如何将所有断言失败消息打印到SoapUI的HTML报告中
- 7. Python单元测试:使鼻子显示失败的断言值
- 8. calcopticalflowpyrlk断言失败
- 9. 如何使用IReporter将Reporter.log(“登录失败。”)与定制testng报告集成?
- 10. 断言调试器断言失败
- 11. JProfiler的断言失败
- 12. C:malloc的断言失败
- 13. TestNG报告:stacktrace显示出现故障的方法,但未显示行号
- 14. 如何让GDB停止断言失败?
- 15. OpenCV:Traincascade失败“断言失败_img.cols == winSize.width”
- 16. 快速JSON失败,断言`IsObject()'失败
- 17. dafny可以显示一个失败断言的反例吗?
- 18. 我如何生成junit报告失败
- 19. 调试断言失败
- 20. WebDev.WebServer40.exe - 断言失败
- 21. 调试断言失败
- 22. 当第二断言失败
- 23. OpenCV Flann - 断言失败
- 24. Borland断言失败local_unwind()
- 25. AfxGetInstanceHandle()触发断言失败
- 26. 断言`IsArray()'失败(RapidJSON)
- 27. 调试断言失败
- 28. OpenCV3断言失败上accumulateWeighted
- 29. munmap_chunk:断言`ret == 0'失败
- 30. 调试断言失败 - C++
我认为,你不应该以这种方式“放弃”你的工作(这是一种非常糟糕的风格),而是要创造一个好的信息。如果你的断言真的太枯燥,并且类似于编写合理的消息,在方法开始时创建一个Integer dullAssertNum,并将“assert”+(dullAssertNum ++).toString包括到每个无效断言中。 – Gangnus
你会问为什么这是一种不好的风格?因为只有在一种测试方法中有许多行时,才需要指出行号。只有在生成文件的情况下,它才是不错的风格。在生成的文件中,您可以生成行号并将其插入到消息中。 – Gangnus