2013-11-28 51 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

很好,谢谢! –