2013-04-19 1 views
2

나는 100 가지 테스트 메소드를 가지고있다. 각 테스트가 끝나면 몇 가지 작업 (데이터 정리)을 수행해야합니다. 이 100 개의 테스트에는 각각 다른 동작이 있습니다. 이 100 가지 테스트는 하나의 패키지 또는 클래스에 포함되지 않습니다. 그들은 배포됩니다.testng 프레임 워크의 각 테스트 메소드 종료 후 정리

어떻게하면됩니까?

지금 테스트가 통과되면 테스트의 일부이므로 정리가 수행됩니다. 그러나 테스트가 실패하면 정리 작업이 수행되지 않습니다. 이 작품을 어떻게 만들 수 있습니까?

모든 포인터가 도움이됩니다.

답변

2

테스트가 어떤 공통의 정리를하지 않은 경우, 당신은 테스트를 보장 할 수 있습니다 사용하여 시험 방법 내에서 정리됩니다 시도/finally 블록, 뭔가 같은 :

try { 
    // do test 
} 
finally { 
    // do cleanup 
} 

어떤 공통의 정리가있는 경우 테스트 방법 사이에 @AfterMethod을 사용하여 클리어 업을 수행 할 수 있습니다.

많은 경우 일반적인 정리가있는 것처럼 들리지 않으므로 처음 사용하면 더 잘 작동 할 수 있습니다. 100 가지의 다른 정리 방법이 필요하거나 일반적인 설정/정리가 필요할 경우 고려할 가치가 있습니다.

+0

감사합니다! 이게 내가 찾고 있던거야. – kavita

0

그룹을 사용하고 어딘가에서 @AfterGroups를 실행할 수 있습니다. @BeforeGroups도 있습니다. 빌드 툴링으로 설정하는 것은 약간 지루하며 IDE와의 상호 작용도 있습니다. BeforeSuite와 AfterSuite도 있습니다.

다른 대안은 Spring을 사용하고 모든 테스트에서 동일한 스프링 컨텍스트를 사용할 수 있습니다 (스프링 컨텍스트는 그런 식으로 다시 사용됩니다). 그런 다음 테스트 후 컨텍스트가 파손될 때 몇 가지 작업을 수행 할 수 있습니다.

1

@AfterMethod는 모든 클래스가이 메소드를 필요로한다는 것을 의미합니다. 따라서 각 클래스/메소드를 편집해야합니다. @AfterGroups와 동일합니다.

내가 제안하는 것은 IInvokedMethodListener을 구현하는 것입니다. 이렇게하면 beforeInvocation 및 afterInvocation 메서드가 제공됩니다. afterInvocation 메서드에서 정리 코드를 구현합니다. 이 정리가 필요한 모든 테스트로 스위트 파일을 만들고이 리스너를 지정하십시오.

희망이 있습니다.

1

테스트 후에 @AfterMethod를 사용하여 이미 정리 한 것 같습니다. @AfterMethod가 실패한 후에 작동하게하려면 다음을 사용해야합니다.

@AfterMethod(alwaysRun=true) 
관련 문제