2011-09-10 5 views
1

테스트를 실행 한 후 일부 메소드를 실행하는 방법이 있는지 알고 싶습니다. 나는 이클립스를 사용하고 있으며 일부 또는 모든 테스트를 실행 한 다음 일부 코드 ( )를 실행하여 junit이 항상 마지막 테스트 후 한 번 내 눈물을 실행할 수 있도록하고 싶습니다.마지막 테스트 후 junit4에서 글로벌 티 아웃 메소드 실행

구체적인 문제는 셀렌 webdriver를 사용하고 있으며 모든 테스트가 끝난 후에 webdriver의 종료 방법을 실행하고 싶습니다. 먼저 정적 클래스가 webdriver 참조를 관리하고 있었으므로 이제 싱글 톤 패턴으로 이동했습니다. 더 나은 해결책이있을 수 있다고 믿지만 지금은 자바 초보자부터 IoC 컨테이너를 사용하고 싶지 않습니다.

지금까지 나는 몇 가지 접근법을 시도했지만 아무도 성공하지 못했습니다.

양복 접근 방식은 단지 내 모든 테스트를 실행할 때 작동합니다

@RunWith(Suite.class) 
@SuiteClasses({SomeTest.class, OtherTest.class, AnotherTest.class}) 
    public class TestSuit { 

    @BeforeClass 
    public static void setUp() { 
     System.out.println("setting up"); 
    } 

    @AfterClass 
    public static void tearDown() { 
     System.out.println("tearing down"); 
    } 
} 

하지만 난 그냥 하나 개의 테스트 클래스 또는 하나 개의 특정 공간에서 모든 테스트를 실행하고 싶다면?

클래스 접근법은 모든 테스트가 하나의 클래스로 그룹화 된 경우에만 작동합니다.

나는 NUnit이 SetUpFixtureAttribute을 구현했다고 믿고 있는데, 나는 이것을 얻고 싶다. jUnit에 대응하는 부분이 있는가?

답변

0

대신 TestNG를 사용해 보셨습니까? @ BeforeTest/@ AfterTest 또는 @ BeforeSuite/@ AfterSuite를 사용하여 테스트 그룹 또는 테스트 그룹 전후에 브라우저 열기/닫기 방법을 실행할 수 있습니다. (http://testng.org/doc/documentation-main.html)

< 실내> < 시험> < 클래스> ... </클래스> </시험> ... </실내>

개인적으로 필자는 @ BeforeMethod/@ AfterMethod를 사용하여 브라우저를로드하고 닫습니다. 따라서 새 테스트를 수행하기 전에 브라우저 인스턴스를 새로 가져옵니다. 이 작업을 수행하는 데 더 오랜 시간이 걸리지 만, 실행중인 테스트/소프트웨어를 기반으로 만든 선택 일뿐입니다. 또한 @ BeforeClass/@ Afterclass를 사용하면 테스트 클래스에서 테스트 그룹화에 대해 걱정할 필요없이 병렬 스레드에서 테스트를 실행할 수 있습니다.

+0

나는 그것을 시도해 볼 것이라고 생각한다. 지금까지 유일한 해결책이다. 타이에게 도움을 청하십시오. – 0lukasz0

+1

Lukas가이 작업을 수행 했습니까? – SlimDavid

0

그런 경우 JUnit을 사용하려는 경우, 사용되는 테스트 러너의 대체 버전이나 변경된 버전을 제공 할 수 있습니다. 테스트 케이스 안에 디버그 플래그를 설정하고 그 후에 일어나는 일을 디버깅하기 만하면됩니다. 머지 않아 테스트 주자 구현이 올바른 위치에 도달하게됩니다.

이제 시간 있습니다. 클래스를 src 폴더에 복사하면됩니다 (추가 src 폴더 또는 src/test/java 내부에서 코드베이스를 엉망으로 만들 수 없습니다). 이제 원하는대로 모든 클래스에서 클래스를 변경하십시오 (원래 패키지와 원래 클래스 이름이어야 함).

재미있는 부분은 클래스 경로가 부트 스트랩 로더에 의해 처음으로로드되는 eclipse/등으로 구성된다는 점입니다. 이렇게하면 원래의 junit 버전이로드되기 전에 제공된 버전이 먼저 선택됩니다.

이제 테스트 러너 확장 프로그램 (또는 원하는 모든 호출)을 호출 할 수 있으며 원래 클래스와 동일한 패키지에 있으므로 모든 것을 완벽하게 제어 할 수 있습니다.

나 자신을 위해 클래스 파일 내에서 선언 된 방식대로 순서를 지정하기 위해 클래스를 확장했다. 클래스 파일을 읽어 올바른 메서드 순서를 얻는다.

또한 패키지 및 하위 패키지를 검사하여 추가 테스트를 수행하므로 패키지를 사용하지 않아도되고 빌드 할 클래스를 일부 제공해야합니다. 서브 스위트는 이제 추가 테스트 케이스를 발견하여 즉석에서 구축됩니다. 내 스위트 룸에도 해당됩니다. 때로는 특정 하위 패키지에서 모든 테스트가 필요하므로 suite로 주석을 달았습니다.

나머지는 나머지를 구성하여 러너를 구성합니다. 심지어 주석을 게임에 추가 할 수도 있습니다. 따라서 @Fast와 같은 테스트에 주석을 달고 테스트 러너 내에서 빠른 테스트 만 실행하는 것은 제품군에 @Fast로 주석이 달려 있기 때문입니다. 알았어.