JUnit 4.8.2를 사용하여 Selenium 테스트 모음 (실제로 WebDriver 지원 Selenium)을 구동하고 있습니다. 테스트가 어설 션에 실패하자마자 테스트에서 브라우저의 스크린 샷을 자동으로 찍고 싶습니다. 모든 테스트는에서 상속 SeleniumBaseTestCase
하고 대부분은에서 상속 SeleniumBastTestCaseWithCompany
합니다 ( @Before
및 @After
메서드를 사용하여 Selenium을 통해 공통 테스트 데이터를 만들고 정리).
의 하위 클래스를 in TestWatchman
으로 추가하고 의 메서드를 재정 의하여 스크린 샷을 찍으려고했습니다. 문제는 의 메서드가 호출 되기 전에 테스트 데이터를 정리 하는 메서드가 실행되고 있으므로 스크린 샷이 실패한 테스트가 아니라 정리의 마지막 단계입니다.@Rule
SeleniumBaseTestCase
TestWatchman
failed
@After
TestWatchman
failed
그것으로 조금 찾고, 것 같다 TestWatchman
의 apply
방법은 바로 통과를 호출하지 Statement
부르는 (만 노출 방법), S는 방법을 평가하는 ' @After
떠나는 방법 TestWatchman
(또는 다른 Rule
) 시험의 실행 사이의 코드를 삽입 할 기회를 그리고 @After
내가 말할 수 있는 한 방법.
또한 커스텀 Runner
으로 Statement
주석이 달린 메소드가 메소드 @AfterFailure
보다 먼저 실행 되도록 생성 된 s 를 변경 하는 커스텀 을 생성하는 접근 방식을 보았습니다 @After
(그러므로 스크린 샷은 이러한 @AfterFailure
메소드 에서 캡처 할 수 있음 ). 그러나 이것은 BlockJUnit4ClassRunner
의 withAfters
메소드 를 재정의하는 데 의존합니다. 문서 에 따르면 더 이상 사용되지 않으며 비공개가 될 예정이며 대신 규칙 사용을 제안합니다.
@Rule 라이프 사이클 에 대한 또 다른 답변을 찾았습니다. 이처럼 들리는 JUnit 4.8에서는 불가능할 수도 있지만 JUnit 4.10에서는 가능할 수 있습니다. 그게 맞다면 충분히 공평하다면 먼저 확인하고 싶습니다.
내가 원하는 것을 성취 할 수있는 우아하고 미래 지향적 인 방법에 대한 모든 생각은 대단히 감사하겠습니다!
분석에 맞습니다. @Befores 및 @Afters가 모든 규칙 앞에 문 목록에 추가됩니다. 는 @Before
후에 실행됩니다 @Rule
와는 @After
전과 실행됩니다 @Rule
. 이 문제를 해결하는 방법은 SeleniumBaseTestCaseWithCompany
.
가장 쉬운 방법은 @Before/@After
메서드 를 제거 하고 ExternalResource로 바꾸는 것입니다 . 다음과 같이 보일 수 있습니다.
public class BeforeAfterTest {
@Rule public TestRule rule = new ExternalResource() {
protected void before() throws Throwable { System.out.println("externalResource before"); }
protected void after() { System.out.println("externalResource after"); }
};
@Test public void testHere() { System.out.println("testHere"); }
}
이것은 제공합니다 :
externalResource before
testHere
externalResource after
이 필드는 기본 클래스에 넣을 수 있으므로 상속 / 무시됩니다. @RuleChain (4.8이 아닌 4.10)을 사용하여 원하는 방식으로 규칙을 정렬 할 수 있기 때문에 @After와 규칙 사이의 순서에 대한 문제는 사라집니다 .
변경할 수없는 경우 SeleniumBaseTestCaseWithCompany
확장 할 수 BlockJUnit4ClassRunner
있지만 withAfters를 재정의하지 않고 BlockJUnit4ClassRunner # methodBlock ()을 재정의 합니다. 그런 다음 super.methodBlock을 호출하고 필요에 따라 문을 재정렬 할 수 있습니다 [*].
[*] 코드를 복사하고 줄을 재정렬 할 수 있지만 withRules는 비공개이므로 하위 클래스에서 호출 할 수 없습니다.
이 기사는 인터넷에서 수집됩니다. 재 인쇄 할 때 출처를 알려주십시오.
침해가 발생한 경우 연락 주시기 바랍니다[email protected] 삭제
몇 마디 만하겠습니다