2013-07-15 32 views

cevap

9

Hazır bir şey olduğunu düşünmüyorum ama bunun için özel bir açıklama oluşturmak oldukça kolay.

Testlerinizi Test koşucu Ovverride özel açıklama

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

(yani testi değerini kontrol ve sonunda görmezden/ateş edeceği)

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); 
     } 
    } 
} 

oluşturun ve işaretlemek

@RunWith(ConditionalTestRunner.class) 
public class TestClass { 

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

Sadece test ettim, benim için çalışıyor. :)

Kredi için: Conditionally ignoring JUnit tests

+0

Güzel bir çözüm gibi görünüyor ama JUnit 4'ün Android ile çalışmasını nasıl sağlıyorsunuz? –

+0

Hiçbir Junit sürümü olmadan herhangi bir problem olduğunu sanmıyorum, sanırım sonunda test koşucusunu değiştirdiniz. Kullandığınız sürüm hangisidir? – Enrichman

+0

Sanırım JUnit 3.8. Android test araçları JUnit 4'ü desteklememektedir: http://developer.android.com/tools/testing/testing_android.html –

2

Ben bu soruya cevap arayan ettik ve sürümünü kontrol etmek daha iyi bir yol bulamadı. Aşağıdaki mantıksal olarak, aşağıdaki Android TestCase yöntemlerine bir denetim koyarak test mantığının yürütülmesini bastırmayı başardı. Ancak, bu aslında bireysel testlerin yürütülmesini engellemez. Bu gibi runTest() yöntemini geçersiz kılmak, işe yaramayacağını bildiğiniz API düzeylerinde "geçiş" yapılmasına neden olur. Test mantığınıza bağlı olarak, tearDown()'u da geçersiz kılmak isteyebilirsiniz. Belki birisi daha iyi bir çözüm sunacaktır.

@Override 
protected void setUp() throws Exception { 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) { 
     if (Log.isLoggable(TAG, Log.INFO)) { 
      Log.i(TAG, "This feature is only supported on Android 2.3 and above"); 
     } 
    } else { 
     super.setUp(); 
    } 
} 

@Override 
protected void runTest() throws Throwable { 
    if (Build.VERSION.SDK_INT < Build.VERSION_CODES.GINGERBREAD) { 
     assertTrue(true); 
    } else { 
     super.runTest(); 
    } 
} 
İlgili konular