2016-08-31 5 views
0

У меня есть простое приложение для Android с некоторыми эспрессо-тестами. Я хочу написать некоторый базовый класс, поэтому все мои тестовые классы наследуют его методы @beforeClass и @afterClass, но проблема в том, что когда я делаю это как пример кода ниже, JUnit не видит никаких тестов в al. Я получил сообщение Empty test suite.. В чем проблема?JUnit android test classinheritance

Пример кода:

public class RealmTest { 
    protected static Realm realm; 

    @BeforeClass 
    public static void beforeClass() { 
     realm = Realm.getDefaultInstance(); 
     realm.setAutoRefresh(true); 
    } 

    @AfterClass 
    public static void afterClass() { 
     realm.close(); 
    } 
} 

@RunWith(AndroidJUnit4.class) 
public class MainActivityTest extends RealmTest { 
    @Rule 
    public IntentsTestRule<MainActivity> activityTestRule = new IntentsTestRule<>(MainActivity.class); 

    @Test 
    public void startedFine() { 
     assertNotNull(realm); 
     onView(withId(R.id.button)).perform(click()); 
     intended(hasComponent(new ComponentName(getTargetContext(), EducationActivity.class))); 
    } 
} 

Если я побегу все тесты, тесты из MainActivityTest не будет работать. Спасибо за вашу помощь, скажите, нужна ли дополнительная информация.

+0

поместите эти два метода в MainActivityTest. Работают ли они – piotrek1543

+0

, вы установили 'testInstrumentationRunner' в свой файл' app/build.gradle' – piotrek1543

ответ

0

Guessing: среда JUnit не ищет статические методы. Поэтому, возможно, вы просто отбрасываете это ключевое слово из своих базовых методов (предположим, что вы могли бы сохранить свое Realm static тем не менее, я предполагаю, что вы действительно хотите только одного из них).

Но тогда другое предложение: не используйте наследование для тестовых случаев.

Точка, которая делает тестовые кейсы ценным: вы должны быстро найти и исправить ошибки в вашем производственном коде.

Но когда ваша «настройка» скрыта от ваших тестовых таблиц - потому что вещи происходят не только в некотором методе @Before ... но в методе @Before где-то, в каком-то другом классе ... ну, это может серьезно увеличьте время, необходимое вам для понимания неудачной тестовой таблицы. Потому что: вместо того, чтобы просто изучать ваш тестовый пример, вы обнаружите, что вы копаете в пределах тестовый код, чтобы понять, что именно происходит кроме код в этом недействительном методе тестирования сам!

Таким образом: be действительно тщательное балансирование «дублирование кода» по сравнению с «тестовым случаем легко понять» аспекты!

+0

, в базовом классе есть статические методы, потому что методы, аннотированные с @ BeforeClass/@ AfterClass, должны быть статическими, как это требует JUnit. О остальном, да, спасибо, я согласен с вами, но я просто хотел сделать простую инициализацию здесь в базовом классе, поэтому я не буду повторять одни и те же строки везде, сохраняя код немного чистым и ясным. – AndreyS

+0

Ups; слишком давно, что я использовал этот материал! – GhostCat