Belirli Android SDK sürümleri için deneme testlerini yok saymak için bir ek açıklama veya başka kullanışlı bir yol var mı? Lint ek açıklama TargetApi (x) ile benzer bir şey var mı? Veya Build.VERSION kullanarak testi çalıştırıp çalıştırmadığımı kontrol etmek zorunda mıyım?SDK düzeyine bağlı olarak Android birim testlerini göz ardı etme
cevap
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
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();
}
}
Güzel bir çözüm gibi görünüyor ama JUnit 4'ün Android ile çalışmasını nasıl sağlıyorsunuz? –
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
Sanırım JUnit 3.8. Android test araçları JUnit 4'ü desteklememektedir: http://developer.android.com/tools/testing/testing_android.html –