테스트 실패 후 @After 메소드 이전에 JUnit 4.8이 코드를 실행하도록하려면 어떻게해야합니까?

로완 :

JUnit 4.8.2를 사용하여 Selenium 테스트 모음 (실제로 WebDriver 지원 Selenium)을 구동하고 있습니다. 테스트가 어설 션에 실패하자마자 테스트에서 브라우저의 스크린 샷을 자동으로 찍고 싶습니다. 모든 테스트는에서 상속 SeleniumBaseTestCase하고 대부분은에서 상속 SeleniumBastTestCaseWithCompany합니다 ( @Before@After메서드를 사용하여 Selenium을 통해 공통 테스트 데이터를 만들고 정리).

의 하위 클래스를 in TestWatchman으로 추가하고 메서드를 재정 의하여 스크린 샷을 찍으려고했습니다. 문제는 메서드가 호출 되기 전에 테스트 데이터를 정리 하는 메서드가 실행되고 있으므로 스크린 샷이 실패한 테스트가 아니라 정리의 마지막 단계입니다.@RuleSeleniumBaseTestCaseTestWatchmanfailed@AfterTestWatchmanfailed

그것으로 조금 찾고, 것 같다 TestWatchmanapply방법은 바로 통과를 호출하지 Statement부르는 (만 노출 방법), S는 방법을 평가하는 ' @After떠나는 방법 TestWatchman(또는 다른 Rule) 시험의 실행 사이의 코드를 삽입 할 기회를 그리고 @After내가 말할 수 있는 한 방법.

또한 커스텀 Runner으로 Statement주석이 달린 메소드가 메소드 @AfterFailure보다 먼저 실행 되도록 생성 s 를 변경 하는 커스텀 생성하는 접근 방식을 보았습니다 @After(그러므로 스크린 샷은 이러한 @AfterFailure메소드 에서 캡처 할 수 있음 ). 그러나 이것은 BlockJUnit4ClassRunnerwithAfters메소드 를 재정의하는 데 의존합니다. 문서 에 따르면 더 이상 사용되지 않으며 비공개가 될 예정이며 대신 규칙 사용을 제안합니다.

@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] 삭제

에서 수정
0

몇 마디 만하겠습니다

0리뷰
로그인참여 후 검토

관련 기사

TOP 리스트

  1. 1

    PrematureCloseException : 연결이 너무 일찍 닫혔습니다.

  2. 2

    MDRotatingPieChart를 회전하면 각도 대신 x / y 위치가 변경됩니다.

  3. 3

    c # 웹 사이트에서 텍스트를 복사하는 방법 (소스 코드 아님)

  4. 4

    jfreecharts에서 x 및 y 축 선을 조정하는 방법

  5. 5

    ArrayBufferLike의 typescript 정의의 깊은 의미

  6. 6

    Ionic 2 로더가 적시에 표시되지 않음

  7. 7

    복사 / 붙여 넣기 비활성화

  8. 8

    Google Play Console에서 '예기치 않은 오류가 발생했습니다. 나중에 다시 시도해주세요. (7100000)'오류를 수정하는 방법은 무엇입니까?

  9. 9

    정점 셰이더에서 카메라에서 개체까지의 XY 거리

  10. 10

    QT Designer를 사용하여 GUI에 이미지 삽입

  11. 11

    java Apache POI Word 기존 테이블 셀 스타일 및 서식이있는 행 삽입

  12. 12

    Kubernetes Horizontal Pod Autoscaler (HPA) 테스트

  13. 13

    Android Kotlin은 다른 활동에서 함수를 호출합니다.

  14. 14

    C # HttpWebRequest 기본 연결이 닫혔습니다. 전송시 예기치 않은 오류가 발생했습니다.

  15. 15

    어떻게 같은 CustomInfoWindow 다른 이벤트를 할 수 있습니다

  16. 16

    rclone으로 원격 디렉토리의 모든 파일을 삭제하는 방법은 무엇입니까?

  17. 17

    dataSnapShot.getValue () 반환 데이터베이스에 그겁니다 데이터 종료 널 (null)

  18. 18

    ORA-12557 TNS : 프로토콜 어댑터를로드 할 수 없습니다

  19. 19

    JNDI를 사용하여 Spring Boot에서 다중 데이터 소스 구성

  20. 20

    다음 컨트롤이 추가되었지만 사용할 수 없습니다.

  21. 21

    C # Asp.net 웹 API-JSON / XML 변환기 API 만들기

뜨겁다태그

보관