2013-11-28 54 views
1

我想知道是否可以隨機化儀器測試運行的順序,即那些擴展了ActivityInstrumentationTestCase2的順序。我試過this blog post,但是我不知道如何告訴測試框架我希望使用測試運行器。隨機的儀器測試順序

問題是我不能使用@RunWith註釋,因爲這些是(據我所知)JUnit3測試,而不是JUnit4。

這很可能是毫無意義的,因爲它們不需要隨機化,但是以這種方式證明測試的獨立性會很好。

理想情況下,我想讓它首先使用命令行和gradle包裝運行。

然後,如果可能,最好讓它通過Android Studio工作。

[編輯]

我可以看到,當你做 「編輯配置。」在AS中,可以通過「Specific instrumentation runner(可選)」框指定您自己的跑步者。不幸的是,如果我這樣做,我得到以下錯誤:

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

很好,謝謝! –