如何使用TestNG SoftAssertions在测试通过时打印通过消息
在SoftAssertion中,当测试失败时,它只打印失败消息,但没有在测试通过时打印通过消息的规定。我想在SoftAssertion通过时打印通过消息 我已经为AssertEquals编写了以下包装方法: 1.SoftAssertion.java==>>如何使用TestNG SoftAssertions在测试通过时打印通过消息,testng,Testng,在SoftAssertion中,当测试失败时,它只打印失败消息,但没有在测试通过时打印通过消息的规定。我想在SoftAssertion通过时打印通过消息 我已经为AssertEquals编写了以下包装方法: 1.SoftAssertion.java==>> import org.testng.asserts.SoftAssert; public class SoftAssertion { public SoftAssert softAssert = new SoftAssert();
import org.testng.asserts.SoftAssert;
public class SoftAssertion {
public SoftAssert softAssert = new SoftAssert();
public SoftAssertion() {
}
public void assertAll(){
softAssert.assertAll();
}
public void assertEquals(String actual, String expected, String failMessage, String passMessage) {
if (actual.equals(expected)){
softAssert.assertEquals( actual, expected, failMessage);
Report.testPass(passMessage);
} else{
softAssert.assertEquals( actual, expected, failMessage);
Report.testFail(failMessage);
}
}
}
import org.testng.asserts.SoftAssert;
public class SoftAssertion {
public SoftAssert softAssert = new SoftAssert();
public SoftAssertion() {
}
public void assertAll(){
softAssert.assertAll();
}
public void assertEquals(String actual, String expected, String failMessage, String passMessage){
try {
softAssert.assertEquals(actual, expected, failMessage);
System.out.println("Assertion passed");
Report.testPass(passMessage);
}catch (AssertionError e){
System.out.println("Assertion failed");
Report.testFail(failMessage);
throw e;
}
}
}
import org.testng.asserts.SoftAssert;
public class SoftAssertion {
public SoftAssert softAssert = new SoftAssert();
public SoftAssertion() {
}
public void assertAll(){
softAssert.assertAll();
}
public void assertEquals(String actual, String expected, String failMessage, String passMessage) {
if (actual.equals(expected)){
softAssert.assertEquals( actual, expected, failMessage);
Report.testPass(passMessage);
} else{
softAssert.assertEquals( actual, expected, failMessage);
Report.testFail(failMessage);
}
}
}
import org.testng.asserts.SoftAssert;
public class SoftAssertion {
public SoftAssert softAssert = new SoftAssert();
public SoftAssertion() {
}
public void assertAll(){
softAssert.assertAll();
}
public void assertEquals(String actual, String expected, String failMessage, String passMessage){
try {
softAssert.assertEquals(actual, expected, failMessage);
System.out.println("Assertion passed");
Report.testPass(passMessage);
}catch (AssertionError e){
System.out.println("Assertion failed");
Report.testFail(failMessage);
throw e;
}
}
}
问题2。哪种方法更好,第一种方法还是第二种方法使用try-catch?为了确保记录已通过和失败的断言的消息,您可以这样做(我使用的是今天最新发布的TestNG版本,即,
7.0.0-beta3
):
通过扩展org.testng.asserts.SoftAssert
[如果您想扩展它,还可以查看org.testng.asserts.LoggingAssert
],构建一个定制的断言类]
下面是一个示例实现
import org.testng.asserts.IAssert;
导入org.testng.asserts.SoftAssert;
公共类SimpleLoggingAssert扩展了SoftAssert{
@凌驾
AssertSuccess上的公共无效(IAssert assertCommand){
System.err.println(assertCommand.getMessage()+);
}
@凌驾
AssertFailure上的公共无效(IAssert assertCommand、AssertOnError ex){
字符串后缀=
字符串格式(
“应为[%s],但找到[%s]”,
assertCommand.getExpected().toString()、assertCommand.getActual().toString());
System.err.println(assertCommand.getMessage()+“+后缀);
}
}
以下是测试代码:
import org.testng.annotations.Test;
公共类NewSoftAssertTest{
@试验
公共无效myTest(){
SimpleLoggingAssert softAssert=新SimpleLoggingAssert();
assertEquals(“A”、“B”、“Test1:确保字符串相等”);
assertEquals(“Hello”、“Hello”、“Test2:确保字符串相等”);
softAssert.assertAll();
}
}
这是执行输出
Test1: Ensure strings are equal <FAILED>. Expected [B] but found [A]
Test2: Ensure strings are equal <PASSED>
java.lang.AssertionError: The following asserts failed:
Test1: Ensure strings are equal expected [B] but found [A]
Expected :B
Actual :A
<Click to see difference>
at org.testng.asserts.SoftAssert.assertAll(SoftAssert.java:47)
at com.rationaleemotions.stackoverflow.qn55387064.NewSoftAssertTest.myTest(NewSoftAssertTest.java:15)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:131)
at org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:570)
at org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:170)
at org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
at org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:790)
at org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:143)
at org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
at org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
at org.testng.TestRunner.privateRun(TestRunner.java:763)
at org.testng.TestRunner.run(TestRunner.java:594)
at org.testng.SuiteRunner.runTest(SuiteRunner.java:398)
at org.testng.SuiteRunner.runSequentially(SuiteRunner.java:392)
at org.testng.SuiteRunner.privateRun(SuiteRunner.java:355)
at org.testng.SuiteRunner.run(SuiteRunner.java:304)
at org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
at org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
at org.testng.TestNG.runSuitesSequentially(TestNG.java:1146)
at org.testng.TestNG.runSuitesLocally(TestNG.java:1067)
at org.testng.TestNG.runSuites(TestNG.java:997)
at org.testng.TestNG.run(TestNG.java:965)
at org.testng.IDEARemoteTestNG.run(IDEARemoteTestNG.java:73)
at org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
===============================================
Default Suite
Total tests run: 1, Passes: 0, Failures: 1, Skips: 0
===============================================
Test1:确保字符串相等。预期[B]但发现[A]
测试2:确保字符串相等
java.lang.AssertionError:以下断言失败:
测试1:确保字符串等于预期的[B]但找到的[A]
预期:B
实际:A
位于org.testng.asserts.SoftAssert.assertAll(SoftAssert.java:47)
在com.rationalemotions.stackoverflow.qn55387064.NewSoftAssertTest.myTest(NewSoftAssertTest.java:15)
在sun.reflect.NativeMethodAccessorImpl.invoke0(本机方法)处
位于sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
在sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)中
位于java.lang.reflect.Method.invoke(Method.java:498)
位于org.testng.internal.MethodInvocationHelper.invokeMethod(MethodInvocationHelper.java:131)
位于org.testng.internal.TestInvoker.invokeMethod(TestInvoker.java:570)
位于org.testng.internal.TestInvoker.invokeTestMethod(TestInvoker.java:170)
位于org.testng.internal.MethodRunner.runInSequence(MethodRunner.java:46)
位于org.testng.internal.TestInvoker$MethodInvocationAgent.invoke(TestInvoker.java:790)
位于org.testng.internal.TestInvoker.invokeTestMethods(TestInvoker.java:143)
位于org.testng.internal.TestMethodWorker.invokeTestMethods(TestMethodWorker.java:146)
位于org.testng.internal.TestMethodWorker.run(TestMethodWorker.java:128)
位于org.testng.TestRunner.privateRun(TestRunner.java:763)
位于org.testng.TestRunner.run(TestRunner.java:594)
位于org.testng.SuiteRunner.runTest(SuiteRunner.java:398)
在org.testng.SuiteRunner.runsequential上(SuiteRunner.java:392)
位于org.testng.SuiteRunner.privateRun(SuiteRunner.java:355)
运行(SuiteRunner.java:304)
位于org.testng.SuiteRunnerWorker.runSuite(SuiteRunnerWorker.java:53)
位于org.testng.SuiteRunnerWorker.run(SuiteRunnerWorker.java:96)
在org.testng.testng.runSuitesSequentially上(testng.java:1146)
位于org.testng.testng.runSuitesLocally(testng.java:1067)
位于org.testng.testng.runSuites(testng.java:997)
位于org.testng.testng.run(testng.java:965)
运行(IDEARemoteTestNG.java:73)
位于org.testng.RemoteTestNGStarter.main(RemoteTestNGStarter.java:123)
===============================================
默认套件
运行的测试总数:1,通过:0,失败:1,跳过:0
===============================================