2016-12-08 7 views
1

Ниже Простой калькулятор приложений, и я хочу, чтобы проверить его с помощью Junit4 и Mockito Framework я проверить это приложение на Junit4 и она работает нормально, но я столкнулся вопрос о реализации MockitoТестирование активности с использованием Mockito Framework

CalculatorOperationsInterfaces. Java

public interface CalculatorOperationsInterfaces { 
    public double add(double input1, double input2); 
    public double subtract(double input1, double input2); 
    public double multiply(double input1, double input2); 
    public double divide(double input1, double input2); 
} 

MainActivity.java

import android.os.Bundle; 
import android.support.v7.app.AppCompatActivity; 

public class MainActivity extends AppCompatActivity implements CalculatorOperationsInterfaces { 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
    } 

    @Override 
    public double add(double input1, double input2) { 
     return (input1 + input2); 
    } 

    @Override 
    public double subtract(double input1, double input2) { 
     return (input1 - input2); 
    } 

    @Override 
    public double multiply(double input1, double input2) { 
     return (input1 * input2); 
    } 

    @Override 
    public double divide(double input1, double input2) { 
     if(input2==0) 
      return -1; 
     else 
      return (input1/input2); 
    } 
} 

CalculatorOperationsMockTest.java

import org.junit.After; 
import org.junit.Assert; 
import org.junit.Before; 
import org.junit.Test; 
import org.junit.runner.RunWith; 
import org.mockito.Mock; 
import org.mockito.runners.MockitoJUnitRunner; 

import static org.mockito.Mockito.when; 

// @RunWith attaches a runner with the test class to initialize the test data 
@RunWith(MockitoJUnitRunner.class) 
public class CalculatorOperationsMockTest { 

    //@Mock annotation is used to create the mock object to be injected 
    @Mock 
    CalculatorOperationsInterfaces calcService; 

    @Before 
    public void setUp() { 
     calcService = new MainActivity(); 
    } 

    @After 
    public void tearDown() { 
     calcService = null; 
    } 


    @Test 
    public void add(){ 
     //add the behavior of calc service to add two numbers 
     when(calcService.add(10.0,20.0)).thenReturn(30.00); 
     //test the add functionality 
     Assert.assertEquals(calcService.add(10.0, 20.0),30.0,0); 
    } 

} 

Я успешно проверить Выше MainActivity.java с помощью Junit, но я новичок в рамках Mockito, когда я пытаюсь запустить CalculatorOperationsMockTest.java файл я получаю ошибку ниже, и я не знаю, как чтобы решить его

Class not found: "myappmania.local_jvm_unit_test.CalculatorOperationsMockTest"Empty test suite. 

ответ

0

Есть по крайней мере 3 проблемы здесь:

  1. Проблема с сообщением об ошибке «Empty Test Suite» может быть решена при просмотре this answer - убедитесь, что у вас есть конфигурация запуска, которая указывает InstrumentationRunner.
  2. Вы не можете получить экземпляр Деятельности, позвонив по телефону new MainActivity(). Правильный идиома:

    @Rule 
    public ActivityTestRule<MainActivity> activityRule = new ActivityTestRule<>(MainActivity.class, true, false); 
    

    , а затем:

    calcService = activityRule.launchActivity(null); 
    
  3. Вы ничего не взятыми насмехаясь над CalculatorService. При тестировании вы используете mocks для проверки поведения программы под названием «system under test». Здесь ваша тестируемая система - это ваша реализация CalculatorService, т. Е. Activity. Насколько мне известно, у вас нет каких-либо зависимостей для инъекций. Надеюсь, что this tutorial on mocking может прояснить эти концепции для вас.

Пожалуйста, также ознакомьтесь с инструкциями в official tutorial for instrumented unit tests in Android.

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