2013-07-15 3 views

Antwort

9

Ich glaube nicht, dass etwas bereit ist, aber es ist ziemlich einfach, eine benutzerdefinierte Annotation dafür zu erstellen.

Erstellen Sie Ihre benutzerdefinierte Anmerkung

@Target(ElementType.METHOD) 
@Retention(RetentionPolicy.RUNTIME) 
public @interface TargetApi { 
    int value(); 
} 

Ovverride der Testläufer (dh den Wert überprüfen und eventuell ignorieren/Feuer der Test)

public class ConditionalTestRunner extends BlockJUnit4ClassRunner { 
    public ConditionalTestRunner(Class klass) throws InitializationError { 
     super(klass); 
    } 

    @Override 
    public void runChild(FrameworkMethod method, RunNotifier notifier) { 
     TargetApi condition = method.getAnnotation(TargetApi.class); 
     if(condition.value() > 10) { 
      notifier.fireTestIgnored(describeChild(method)); 
     } else { 
      super.runChild(method, notifier); 
     } 
    } 
} 

und markieren Sie Ihre Tests

@RunWith(ConditionalTestRunner.class) 
public class TestClass { 

    @Test 
    @TargetApi(6) 
    public void testMethodThatRunsConditionally() { 
     System.out.print("Test me!"); 
    } 
} 

Nur getestet, es funktioniert für mich. :)

Credits: Conditionally ignoring JUnit tests

+0

Sieht wie eine schöne Lösung aus, aber wie erhalten Sie JUnit 4, um mit Android zu arbeiten? –

+0

Ich glaube nicht, dass es ein Problem ohne eine Junit-Version gibt, Sie haben schließlich den Test-Runner geändert, denke ich. Welche Version verwenden Sie? – Enrichman

+0

Ich denke, es ist JUnit 3.8. Android-Testtools unterstützen JUnit 4 nicht: http://developer.android.com/tools/testing/testing_android.html –

2

Ich habe auf diese Frage eine Antwort gesucht und haben keinen besseren Weg, als überprüfen Sie die Version gefunden. Ich konnte die Ausführung der Testlogik bedingt unterdrücken, indem ich die folgenden Android TestCase Methoden eincheckte. Dies verhindert jedoch nicht die Ausführung der einzelnen Tests. Das Überschreiben der runTest()-Methode wie dieser führt dazu, dass Tests auf API-Ebenen "bestanden" werden, von denen Sie wissen, dass sie nicht funktionieren. Abhängig von Ihrer Testlogik möchten Sie möglicherweise auch tearDown() überschreiben. Vielleicht wird jemand eine bessere Lösung anbieten.

Verwandte Themen