私は Selenium、Java、および TestNG を使用してテストを作成しています。単体テストで多くのソフト アサーションを使用することがありますが、それらが失敗した場合、TestNG レポーターはそれらが発生したコード行を表示しません。それを表示させる方法はありますか?実際にレポートをクリックすると、次のような特定の行に移動する必要がありますFailure Exception
。s_assert.assertAll();
s_assert.assertEquals(Alert_text, "Hi.. is alert message!", "Alert Is InCorrect");
質問する
4409 次
3 に答える
3
カスタム ソフト アサーション (私は Verifier と名付けました) の以下の実装は、あなたが求めていることを実行するはずです。
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());
}
}
}
}
于 2016-05-16T03:50:37.680 に答える
0
コード例:
s_assert.assertEquals(Alert_text, "Hi.. is alert message!", "Alert Is InCorrect1");
s_assert.assertEquals(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.assertall();
実行が失敗した後、それは行を指し(s_assert.assertall();)
、その間、ソフトアサートが失敗したというメッセージが表示されます....
Alert Is InCorrect2
Alert Is InCorrect3
出力を確認してください。
于 2016-05-16T05:38:51.767 に答える