2013-02-22 5 views
4

Когда я создаю параметризованные тестовые случаи в JUnit 3.x, я обычно создаю TestSuite с чем-то вродепараметризованные тесты JUnit в тестовом проекте Android

public static Test suite() { 
    TestSuite s = new TestSuite(); 

    for (int i = MIN; i < MAX; ++i) { 
     s.addTest(new MyTest(i)); 
    } 
} 

Этот suite() метод называется правильно при запуске JUnit из команды настольного -линия. Когда я попробовал это с моим тестовым проектом Android, тесты не запускаются. Как заставить мои тесты запускать на эмуляторе? Или существует другой способ создания параметризованных тестов для Android?

Больше мысли:

Обычно я бегу моих тестов с помощью командной строки:

adb shell am instrument -w [-e class <fully qualified test class name>[#<test method name>()]] <Android package name>/android.test.InstrumentationTestRunner 

Это позволяет мне выбрать, какие тесты для запуска из моего тестового набора. В идеале я также хочу запустить параметризованные тесты. Ссылка в комментарии от @Appu описывает создание отдельного приложения, которое запускает тесты JUnit. Как часть этого, это приложение имеет пользовательский TestRunner. Я, скорее всего, заимствую эти идеи, чтобы создать TestRunner, который я могу использовать вместо android.test.InstrumentationTestRunner. Это похоже на большую работу для неординарной задачи. Я предпочитаю не изобретать колесо, если в Android API уже есть аналогичное решение. Кто-нибудь знает об этом? Кроме того, будут полезны другие альтернативные решения.

Nevermind, это выглядит как @dtmilano уже писал это как ответ ...

+1

[This] (http://mylifewithandroid.blogspot.in/2008/11/junit-in-android.html) может быть полезным. Это один из моих любимых блогов. – Kanth

+0

@Appu Спасибо. Не стесняйтесь публиковать это как ответ. Вы заслуживаете, по крайней мере, своего возвышения ;-) –

+0

Итак, вы можете задать свой вопрос +1.Но я могу опубликовать это как ответ, если это действительно помогло вам решить вашу проблему. – Kanth

ответ

2

Вы можете осуществить тест бегун, чтобы иметь возможность передавать параметры Android тестов. См. Пример на how to pass an argument to a android junit test (Parameterized tests).

+0

После того как я отредактировал свой вопрос, я заметил, что вы в основном разместили что-то похожее на то, где мои мысли привели меня. Я не знаю, как я пропустил этот ответ. Обычно я достаточно тщательно проверяю свои уведомления ;-( –

+0

Теперь, когда я посмотрел на javadocs 'InstrumentationTestRunner', я вижу, что я могу переопределить методы getTestSuite()' и/или 'getAllTests()' для вставки тестов в поэтому я могу использовать конструктор или другое решение для передачи параметров в свой тестовый пример, вместо того, чтобы добавлять getter в свой настраиваемый InstrumentationTestRunner. –

2

Или существует другой способ создания параметризованных тестов для Android?

We (Square) написал для этой цели библиотеку под названием Burst. Если вы добавите параметры перечисления в свой конструктор тестов, тестовый бегун Burst будет генерировать тест для каждой комбинации значений перечисления. Например:

public class ParameterizedTest extends TestCase { 
    enum Drink { COKE, PEPSI, RC_COLA } 

    private final Drink drink; 

    // Nullary constructor required by Android test framework 
    public ConstructorTest() { 
    this(null); 
    } 

    public ConstructorTest(Drink drink) { 
    this.drink = drink; 
    } 

    public void testSomething() { 
    assertNotNull(drink); 
    } 
} 
+0

Является ли 'enum' обязательным для вставки внутри тестового класса или может быть автономным классом или вложенным 'enum' из другого класса? –

+0

@ Code-Apprentice это не требуется, любое перечисление будет работать. –

+0

Удивительно! Я добавлю это в свой список библиотек Square, чтобы узнать. перестань удивлять меня. Спасибо за все ваши вклады в сообщество разработчиков Android. –

1

давненько после первоначально писать этот вопрос, я обнаружил, что может непосредственно запустить тестовый класс, который содержит статический suite() метод:

adb shell am instrument -w -e class <fully qualified test class name> <Android package name>/android.test.InstrumentationTestRunner 

Однако тестовый пакет Безразлично» t, когда я пытаюсь запустить все тесты в данном пакете.

Конечно, это было какое-то время. Теперь я использую Android Studio вместо командной строки. Я все равно могу запустить тестовый класс по отдельности, но он все еще не выполняется, когда я выбираю пакет или пытаюсь запустить все мои тесты.

Потенциальная альтернатива заключается в том, чтобы написать мастер-класс испытаний с помощью метода suite(), который добавляет все тесты к возвращенному TestCase. К сожалению, это требует некоторого редактирования вручную каждый раз, когда я добавляю новый тестовый класс в свой пакет.

Смежные вопросы