개요
"@Test" 메소드에서 테스트 할 때 부득이하게 assert를 여러 번 해야 할 경우가 있다.
이 때 한꺼번에 처리해주지 않으면 첫번 째 assert에서 fail이 발생할 경우, 그 아래에 있는 assert 구문을 처리하지 않고 테스트가 종료되어 남아있는 assert 구문을 확인할 수 없다.
이를 해결하기 위한 방법을 정리한다.
내용
TestNG에서는 Hard assert / Soft Assert로 구분한다.
Hard Assert는 assert 시 fail이 발생하면 해당 테스트를 종료하는 것이고,
Soft assert는 assert 시 fail이 발생해도 로그에서는 fail이지만 테스트 결과는 pass로 해준다. 최종 결과를 확인하기 위해서는 아래와 같이 사용해야 한다.
Hard Assert
@Test public void hardAssertTest(){ Assert.assertFalse(2<1); System.out.println("Assertion Failed in Test 1"); Assert.assertTrue(1<0); System.out.println("Assertion Failed in Test 2"); Assert.assertEquals("Sample", "Sample"); System.out.println("Assertion Passed in Test 3"); }
결과
|
---|
Assertion Failed in Test 1
...FAILED: hardAssertTest1 java.lang.AssertionError: expected [true] but found [false] at org.testng.Assert.fail(Assert.java:94) at org.testng.Assert.failNotEquals(Assert.java:513) at org.testng.Assert.assertTrue(Assert.java:42) at org.testng.Assert.assertTrue(Assert.java:52) at testng.TestNGTest2.hardAssertTest1(TestNGTest2.java:13) |
3번 line : PASS, 5번 line : FAIL이 발생하여 7번line의 assert를 하지 않고 hardAssertTest()의 테스트를 종료하고 빠져나온다. 테스트의 최종결과는 FAIL
Soft Assert 1
@Test public void softAssertTest1(){ SoftAssert sa= new SoftAssert(); sa.assertTrue(2<1); System.out.println("Assertion Failed1"); sa.assertFalse(1<2); System.out.println("Assertion Failed2"); sa.assertEquals("Sample", "Failed"); System.out.println("Assertion Failed3"); }
결과
|
---|
Assertion Failed1
Assertion Failed2 Assertion Failed3 PASSED: softAssertTest1 |
assert는 fail이지만 테스트 결과는 PASS로 된다.
Soft Assert 2
@Test public void softAssertTest2(){ SoftAssert sa= new SoftAssert(); sa.assertTrue(2<1); System.out.println("Assertion Failed1"); sa.assertFalse(1<2); System.out.println("Assertion Failed2"); sa.assertEquals("Sample", "Failed"); System.out.println("Assertion Failed3"); sa.assertAll(); }
결과
|
---|
Assertion Failed1
Assertion Failed2 Assertion Failed3 FAILED: softAssertTest2 java.lang.AssertionError: The following asserts failed: expected [true] but found [false], expected [false] but found [true], expected [Failed] but found [Sample] at org.testng.asserts.SoftAssert.assertAll(SoftAssert.java:43) at testng.TestNGTest2.softAssertTest2(TestNGTest2.java:54)
....
|
SoftAssert 객체를 생성한 후 - SoftAssert sa = new SoftAssert();
SoftAssert 객체로 assert를 모두 진행하고 난 뒤, 마지막에 "sa.assertAll()" 을 해주면 하나라도 fail이 발생 시 최종 테스트 결과는 FAIL로 된다.
assert를 모두 확인하고 테스트를 종료하므로 테스트 메소드에 assert 구문이 여러 개 일 경우 SoftAssert의 assertAll을 사용하자.
댓글 없음:
댓글 쓰기