2015-12-16 7 views
2

Я пытаюсь найти пример того, как запустить набор тестов для тестовых классов, которые используют Robolectric, например, у меня есть этот класс:Набор тестов для Android с использованием robolectric?

@Config(sdk = 16, manifest = "src/main/AndroidManifest.xml") 
@RunWith(RobolectricTestRunner.class) 
public class RestaurantModelTest { 

    //setUp code here... 

    @Test 
    public void testFindByLocation() throws Exception { 
     //test code here 
    } 

} 

Все измерительные устройства и утверждение класса RestaurantModelTest проезжают, но у меня есть еще один класс позволяет называть его XModelTest (в котором все утверждения и модульное тестирование проезжают.

Моей проблема

Я не нахожу учебник/примера того, как использовать тест люкс с помощью robolec Трик.

Должно ли это быть сделано в том же пакете, где мой RestaurantModelTest и XModelTest? Если не где?

Также я попытался сделать это с помощью TestSuite от JUnit, но возникает много вопросов, если класс с моим TestSuite расширяет расширение класса TestSuite?

Если кто-то может дать мне короткий пример, используя мои классы RestaurantModelTest и XModelTest, было бы здорово.

ответ

3

Я считаю, я также частично рассмотрели этот вопрос, отвечая на второй вопрос - Can't run android test suite: Exception in thread “main”

Вот как написать набор с Robolectric: Допустим, у нас есть 2 модели классов.

CartModel.java

public class CartModel { 
    public float totalAmount; 
    public int products; 

    public void addToCart(float productPrice) { 
     products++; 
     totalAmount += productPrice; 
    } 
} 

и RestaurantModel.java

public class RestaurantModel {  
    public int staff; 

    public void hire(int numberOfHires) { 
     staff += numberOfHires; 
    } 
} 

Напишем некоторые фиктивные тесты для них:

CartModelTest.java

@RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = BuildConfig.class, sdk=21) 
public class CartModelTest { 

    @Test 
    public void addToCart() throws Exception { 
     CartModel cartModel = new CartModel(); 
     assertEquals(0, cartModel.totalAmount, 0); 
     assertEquals(0, cartModel.products); 
     cartModel.addToCart(10.2f); 
     assertEquals(10.2f, cartModel.totalAmount, 0); 
     assertEquals(1, cartModel.products); 
    } 
} 

RestaurantModelTest.java

@RunWith(RobolectricGradleTestRunner.class) 
@Config(constants = BuildConfig.class, sdk=21) 
public class RestaurantModelTest { 

    @Test 
    public void hire() throws Exception { 
     RestaurantModel restaurantModel = new RestaurantModel(); 
     assertEquals(0, restaurantModel.staff); 
     restaurantModel.hire(1); 
     assertEquals(1, restaurantModel.staff); 
    } 
} 

И теперь последний шаг - сгруппировать их вместе в один ModelsTestSuite.java:

@RunWith(Suite.class) 
@Suite.SuiteClasses({ 
     RestaurantModelTest.class, 
     CartModelTest.class 
}) 
public class ModelsTestSuite {} 

Для запуска - просто щелкните правой кнопкой мыши в ModelsTestSuite и нажмите кнопку "Выполнить ModelsTestSuite". Это оно!

NB! В Android Studio 2.0 3b вам необходимо отключить мгновенный запуск (Preferences -> Build, Execution, Deployment -> Instant Run -> Enable Instant Run - uncheck), чтобы запустить Robolectric тесты (чтобы избежать java.lang.RuntimeException: java.lang.ClassNotFoundException: Could not find a class for package: <package name> and class name: com.android.tools.fd.runtime.BootstrapApplication).

Надеюсь, это поможет

+0

спасибо большое, что вы ответили на мою проблему отлично !!! спасибо за ответ: http://stackoverflow.com/questions/34317022/cant-run-android-test-suite-exception-in-thread-main-java-lang-classnotfound?noredirect=1#comment56376122_34317022 – Jeka

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