2017-01-03 22 views
0

Я не могу запускать свои @SmallTests с терминала. Я создал пример моей установки, и я хотел бы, чтобы вы указали, что я делаю неправильно.Как запустить приборную панель @SmallTests от терминала?

  1. Я использую свой собственный класс бегунка по умолчанию, который выглядит следующим образом:

    public class MyAppTestRunner extends AndroidJUnitRunner { 
    
        @Override 
        public Application newApplication(ClassLoader cl, String className, Context context) 
          throws InstantiationException, IllegalAccessException, ClassNotFoundException { 
         return super.newApplication(cl, MyAppTestApplication.class.getName(), context); 
        } 
    } 
    
  2. Я поставил эту бегун в моем Gradle:

    android { 
        defaultConfig { 
         testInstrumentationRunner "com.MyApp.instrumentation.config.MyAppTestRunner" 
        } 
        testBuildType 'integrationTest' 
    } 
    
  3. Я также с использованием тех Зависимости:

    androidTestCompile com.android.support.test:runner:0.5 
    androidTestCompile com.android.support.test:rules:0.5 
    
  4. И тогда я создал простой класс с одним теста с аннотацией @SmallTest:

    import android.content.Intent; 
    import android.support.test.filters.SmallTest; 
    import android.support.test.rule.ActivityTestRule; 
    import android.support.test.runner.AndroidJUnit4; 
    
    import com.MyApp.a.ui.activity.WelcomeActivity; 
    
    import org.junit.Before; 
    import org.junit.Rule; 
    import org.junit.runner.RunWith; 
    
    
    @RunWith(AndroidJUnit4.class) 
    public class ExampleTestPackage { 
    
        @Rule 
        public ActivityTestRule<WelcomeActivity> activityRule = new ActivityTestRule<>(
         WelcomeActivity.class, true, false 
        ); 
    
        @Before 
        public void before() { 
         activityRule.launchActivity(new Intent()); 
        } 
    
        @SmallTest 
        public void exampleTest() { 
         // some test code 
        } 
    } 
    

Так что это моя установка. По documentation of AndroidJUnitRunner, который я использую, чтобы запустить свои тесты с небольшой аннотацией я должен сделать что-то вроде этого:

Running a specific test size i.e. annotated with SmallTest or MediumTest or LargeTest: adb shell am instrument -w -e size [small|medium|large] com.android.foo/android.support.test.runner.AndroidJUnitRunner

Так что я делаю в терминале:

adb shell am instrument -w -e size small com.MyApp.debug1.test/com.MyApp.instrumentation.config.MyAppTestRunner 

Но мой @SmallTest не найден и выход:

Time: 0.001

OK (0 tests)

Кроме того, если я начинаю мой тестовый класс от Android Studio, то я могу увидеть эту ошибку:

java.lang.Exception: No runnable methods 
at org.junit.runners.BlockJUnit4ClassRunner.validateInstanceMethods(BlockJUnit4ClassRunner.java:191) 
at org.junit.runners.BlockJUnit4ClassRunner.collectInitializationErrors(BlockJUnit4ClassRunner.java:128) 
at org.junit.runners.ParentRunner.validate(ParentRunner.java:416) 
at org.junit.runners.ParentRunner.<init>(ParentRunner.java:84) 
at org.junit.runners.BlockJUnit4ClassRunner.<init>(BlockJUnit4ClassRunner.java:65) 
at android.support.test.internal.runner.junit4.AndroidJUnit4ClassRunner.<init>(AndroidJUnit4ClassRunner.java:37) 
at android.support.test.runner.AndroidJUnit4.<init>(AndroidJUnit4.java:36) 
at java.lang.reflect.Constructor.newInstance(Native Method) 
at android.support.test.internal.runner.junit4.AndroidAnnotatedBuilder.buildAndroidRunner(AndroidAnnotatedBuilder.java:83) 
at android.support.test.internal.runner.junit4.AndroidAnnotatedBuilder.runnerForClass(AndroidAnnotatedBuilder.java:62) 
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
at org.junit.internal.builders.AllDefaultPossibilitiesBuilder.runnerForClass(AllDefaultPossibilitiesBuilder.java:26) 
at org.junit.runner.Computer.getRunner(Computer.java:40) 
at org.junit.runner.Computer$1.runnerForClass(Computer.java:31) 
at org.junit.runners.model.RunnerBuilder.safeRunnerForClass(RunnerBuilder.java:59) 
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:101) 
at org.junit.runners.model.RunnerBuilder.runners(RunnerBuilder.java:87) 
at org.junit.runners.Suite.<init>(Suite.java:81) 
at org.junit.runner.Computer.getSuite(Computer.java:28) 
at android.support.test.internal.runner.TestRequestBuilder.classes(TestRequestBuilder.java:789) 
at android.support.test.internal.runner.TestRequestBuilder.build(TestRequestBuilder.java:753) 
at android.support.test.runner.AndroidJUnitRunner.buildRequest(AndroidJUnitRunner.java:354) 
at android.support.test.runner.AndroidJUnitRunner.onStart(AndroidJUnitRunner.java:260) 
at android.app.Instrumentation$InstrumentationThread.run(Instrumentation.java:1879) 

Что, конечно, может быть исправлено, если я изменю свое @SmallTest к @Test (импорт org.junit.Test;)

Могу ли я с помощью неправильно классов там?

ответ

0

Аннотации @SmallTest, @MediumTest и т.д. из android.support.test.filters не заменяют @Test аннотацию. Аннотации @Test необходимы, чтобы сигнализировать JUnit, что соответствующий метод является тестовым примером (http://junit.org/junit4/javadoc/latest/org/junit/Test.html).

В вашем случае, это будет работать:

@SmallTest 
@Test 
public void exampleTest() { 
    // some test code 
}