2013-11-28 4 views
1

Instrumentation 테스트가 실행되는 순서, 즉 ActivityInstrumentationTestCase2를 확장하는 순서를 임의로 지정할 수 있는지 궁금합니다. 내가 this blog post 다음을 시도했지만 테스트 프레임 워크에 테스트 러너를 사용하는 방법을 알리는 방법을 찾지 못했습니다.계측 테스트의 순서를 무작위로 지정

@RunWith 주석은 JUnit4가 아닌 JUnit3 테스트이므로 (이해할 수있는대로) @RunWith 주석을 사용할 수 없다는 것이 문제입니다.

랜덤화할 필요가 없기 때문에 무의미 할 수도 있지만 테스트의 독립성을 증명하는 것이 좋을 것입니다.

이상적으로는 명령 줄과 gradle 래퍼를 사용하여 처음 실행하는 것이 이상적입니다.

그러면 가능한 경우 Android Studio를 통해 작동하도록하는 것이 좋습니다.

[편집]

내가 볼 수

당신이 할 때 "구성 편집을..." AS에서는 "특정 계측 주자 (선택 사항)"상자를 통해 자신의 주자를 지정할 수 있습니다. 불행하게도 이렇게하면 다음과 같은 오류가 발생합니다.

Test running startedTest running failed: Unable to find instrumentation info for: ComponentInfo{<path_to_class_here>.RandomizingTestRunner} 
Empty test suite. 

나는 그 이유를 알 수 없습니다.

답변

1

당신은 무작위 다음 주자 사용할 수 있습니다

package com.example.test.runners; 

import android.test.InstrumentationTestRunner; 
import android.test.suitebuilder.TestSuiteBuilder; 
import junit.framework.Test; 
import junit.framework.TestSuite; 
import java.util.ArrayList; 
import java.util.Collections; 
import java.util.List; 

public class RandomizedInstrumentationTestRunner extends InstrumentationTestRunner { 

@Override 
public TestSuite getTestSuite() { 
    return buildTestSuite(); 
} 

private TestSuite buildTestSuite() { 
    TestSuiteBuilder builder = new TestSuiteBuilder(getClass().getName(), getTargetContext().getClassLoader()); 
    builder.includePackages(""); 

    List<Test> tests = new ArrayList<Test>(); 
    addTestsFromSuite(builder.build(), tests); 
    Collections.shuffle(tests); 

    TestSuite randomizedSuite = new TestSuite(); 
    for (Test one : tests) { 
     randomizedSuite.addTest(one); 
    } 

    return randomizedSuite; 
} 


private void addTestsFromSuite(TestSuite suite, List<Test> out) { 
    List<Test> tests = Collections.list(suite.tests()); 
    for (Test one : tests) { 
     if (one instanceof TestSuite) { 
       addTestsFromSuite((TestSuite) one, out); 
      } 
      else{ 
       out.add(one); 
      } 
     } 
    } 
} 

을하고 build.gradle에 파일 주자를 설정하는 것을 잊지 마세요 :

android { 

    defaultConfig { 
     testInstrumentationRunner "com.example.test.runners.RandomizedInstrumentationTestRunner" 
     minSdkVersion 8 
    } 

    .... 
} 

마지막으로 다음을 실행합니다 실행 순서를 임의로 확인하려면 두 번 누릅니다.

./gradlew connectedCheck --info 
+0

잘 작동합니다. 감사합니다. –