2013-11-28 2 views
1

Мне интересно, можно ли рандомизировать порядок выполнения контрольных испытаний, то есть тех, которые расширяют ActivityInstrumentationTestCase2. Я пробовал следовать за this blog post, но я не могу понять, как рассказать о структуре тестирования, которую я хочу использовать для своего тестового бегуна.Рандомизировать порядок контрольно-измерительных испытаний

Проблема в том, что я не могу использовать аннотацию @RunWith, так как это (как я понимаю) тесты JUnit3, а не JUnit4.

Вполне возможно, что это бессмысленно, так как они не должны быть рандомизированы, но было бы неплохо доказать независимость испытаний таким образом.

В идеале я хотел бы запустить его с использованием командной строки и оболочки градиента.

Тогда было бы неплохо заставить его работать через Android Studio, если это возможно.

[Редактировать]

я могу видеть, что, когда вы делаете "Edit Configurations..." в 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

Хорошо работает, спасибо! –

Смежные вопросы