我正在使用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