0

테스트 자동화 도구를 구현 중이며 InstrumentationTestCase 확장 클래스가 있습니다. 예를 들어 :각 테스트 스위트에 대해 setUp() 및 tearDown() 메소드를 실행합니다. InstrumentationTestCase Android

public class BaseTests extends InstrumentationTestCase { 

    @Override 
    protected void setUp() throws Exception { 
     super.setUp(); 
     Log.d(TAG, "setUp()"); 
    } 

    @Override 
    protected void tearDown() throws Exception { 
     super.tearDown(); 
     Log.d(TAG, "tearDown()"); 
    } 

    public void test_one() { 
     Log.d(TAG, "test_one()"); 
    } 

    public void test_two() { 
     Log.d(TAG, "test_two()"); 
    } 
} 

내가 BaseTests의 테스트를 실행, 설정() 메소드는 2 번이라고합니다. 한 번은 test_one()을 실행하고 다른 하나는 test_two()을 실행합니다. tearDown()도 마찬가지입니다.이 두 메서드를 각각 실행 한 후에 호출됩니다.

여기서 내가하고자하는 것은 모든 BaseTests 테스트를 실행하기 위해 setUp() 및 tearDown() 메서드를 한 번만 호출하는 것입니다. 그래서 메소드 호출의 순서는 것 같은

1) 설정()

2) test_one()

3) test_two()

4)의 tearDown()

그런 일을 할 수있는 방법이 있습니까?

+0

이 동작을 변경하지는 않지만 setUp/tearDown의 첫 번째 쌍이 호출 될 때마다 또는이를 나타내지 않는 부울을 가질 수 있습니다. 이러한 콜백은 각 테스트가 시작되기 전에 환경을 설정하고 테스트가 끝난 후 정리할 수 있도록하기 위해 호출됩니다. – Blackbelt

답변

0

내가의 아이디어를 다음 결국 실행 후 @AfterClass은 이전에 한 번만 실행되도록 보장하고 @ 그래서 귀하의 경우가 될 것이다 beforeClass 및 @afterClass.

그러나 주석 자체는 사용할 수 없습니다. 대신 기본 클래스에서 (카운터를 사용하여) 구현했으며 테스트 스위트는이 기본 클래스에서 상속받습니다.

여기에 내가 나 자신이 그렇게 할 기반 링크는 다음과 같습니다 https://android.googlesource.com/platform/frameworks/base/+/9db3d07b9620b4269ab33f78604a36327e536ce1/test-runner/android/test/PerformanceTestBase.java

나는이 다른 사람을 도울 수있는 희망!

1

내가 사용하여이 문제를 해결 :

@BeforeClass 
public static void setUpBeforeClass() throws Exception { 
} 

과 :

@AfterClass 
public static void tearDownAfterClass() throws Exception { 
} 

대신 설정() 해체의().

import org.junit.AfterClass; 
import org.junit.BeforeClass; 
public class BaseTests extends InstrumentationTestCase { 

@BeforeClass 
protected static void setUp() throws Exception { 
    //do your setUp 
    Log.d(TAG, "setUp()"); 
} 

@AfterClass 
protected static void tearDown() throws Exception { 
    //do your tearDown 
    Log.d(TAG, "tearDown()"); 
} 

public void test_one() { 
    Log.d(TAG, "test_one()"); 
} 

public void test_two() { 
    Log.d(TAG, "test_two()"); 
} 
} 

특수 효과 @BeforeClass와 테스트가 각각

+0

답변 해 주셔서 감사합니다. 그러나 이러한 주석을 추가하면 빌드가 중단됩니다. 나는 다른 것을 가져와야 하나? –

+0

예, 가져 오기를 잊어 버렸습니다. import해야합니다 : import org.junit.AfterClass; import org.junit.BeforeClass; – cristianorbs

+0

지금 빌드 할 수 있습니다. 수입에 대한 알림을 주셔서 감사합니다.하지만 여전히 각 테스트마다 setUp과 tearDown을 번갈아 인쇄하고 있습니다. InstrumentationTestCase를 확장하므로이 문제가 발생하는지 알 수 없습니다. –