我正在使用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. 如何在selenium中的testng報告中顯示AssertionError顯示
- 5. TestNG中的硬和軟斷言
- 6. 如何在testNG中自定義合格/失敗測試報告
- 7. 斷言失敗
- 8. 斷言失敗
- 9. Jenkins的PMD插件 - 如何顯示構建失敗的報告?
- 10. ShowWindow報告如何失敗?
- 11. 如何,即使斷言失敗
- 12. 如何將所有斷言失敗消息打印到SoapUI的HTML報告中
- 13. 如何在cppunit斷言失敗時顯示十六進制值
- 14. Python單元測試:使鼻子顯示失敗的斷言值
- 15. 我應該報告這個斷言失敗嗎?無論如何,$ asInstance是什麼?
- 16. 斷言失敗try catch塊工作中硒TestNG的
- 17. JMeter斷言失敗
- 18. xcode斷言失敗
- 19. calcopticalflowpyrlk斷言失敗
- 20. MZFormSheetController斷言失敗
- 21. UICollectionView斷言失敗
- 22. OpenCv斷言失敗
- 23. findcontours斷言失敗
- 24. 如何使用IReporter將Reporter.log(「登錄失敗。」)與定製testng報告集成?
- 25. 斷言調試器斷言失敗
- 26. 在斷言評估之前失敗testNG @Test
- 27. 使用Karma在Circle CI中顯示測試失敗報告
- 28. 的UITableView CoreData斷言失敗
- 29. 斷言失敗:: malloc的
- 30. 斷言失敗 - [UITableView的_endCellAnimationsWithContext]
我認爲,你不應該以這種方式「放棄」你的工作(這是一種非常糟糕的風格),而是要創造一個好的信息。如果你的斷言真的太枯燥,並且類似於編寫合理的消息,在方法開始時創建一個Integer dullAssertNum,並將「assert」+(dullAssertNum ++).toString包括到每個無效斷言中。 – Gangnus
你會問爲什麼這是一種不好的風格?因爲只有在一種測試方法中有許多行時,才需要指出行號。只有在生成文件的情況下,它纔是不錯的風格。在生成的文件中,您可以生成行號並將其插入到消息中。 – Gangnus