Mockito – burlándose de una interfaz – lanzando NullPointerException

Estoy recibiendo una excepción de puntero nulo después de burlarse también. Encuentre la estructura de mi proyecto.

//this is the pet interface public interface Pet{ } // An implementation of Pet public class Dog extends Pet{ int id, int petName; } // This is the Service Interface public interface PetService { List<Pet> listPets(); } // a client code using the PetService to list Pets public class App { PetService petService; public void listPets() { // TODO Auto-generated method stub List<Pet> listPets = petService.listPets(); for (Pet pet : listPets) { System.out.println(pet); } } } // This is a unit test class using mockito public class AppTest extends TestCase { App app = new App(); PetService petService = Mockito.mock(PetService.class); public void testListPets(){ //List<Pet> listPets = app.listPets(); Pet[] pet = new Dog[]{new Dog(1,"puppy")}; List<Pet> list = Arrays.asList(pet); Mockito.when(petService.listPets()).thenReturn(list); app.listPets(); } } 

Estoy tratando de utilizar TDD aquí, significa que tengo la interfaz de servicio escrito, pero no la aplicación real. Para probar el método listPets (), claramente sé que su uso del servicio para obtener la lista de mascotas. Pero mi intención aquí para probar el método listPets () de la clase App, Por lo tanto estoy tratando de burlarse de la interfaz de servicio.

El método listPets () de la clase App que utiliza el servicio para obtener las mascotas. Por lo tanto, me estoy burlando de esa parte usando mockito.

  Mockito.when(petService.listPets()).thenReturn(list); 

Pero cuando la prueba de unidad se está ejecutando, perService.listPets () lanzando NullPointerException que he burlado utilizando el código Mockito.when anterior. ¿Podrías ayudarme por esto?

NullPointerException es porque, en la aplicación, petService no se instancia antes de intentar utilizarlo. Para inyectar el simulacro, en App, agregue este método:

 public void setPetService(PetService petService){ this.petService = petService; } 

Luego en su prueba, llame a:

 app.setPetService(petService); 

Antes de ejecutar app.listPets();

También puede usar la anotación @InjectMocks , de esa manera usted no necesitará getters y setters. Sólo asegúrese de agregar a continuación en su caso de prueba después de anotar su clase,

 @Before public void initMocks(){ MockitoAnnotations.initMocks(this); } 
  • Mockito / Power Mockito: incapaz de obtener la salida esperada cuando el método de burla de LayoutParams en android
  • ¿Cómo depurar las pruebas de instrumentación en Android Studio?
  • ¿Es posible simular un servicio de sistema en Android
  • ¿Cómo usar PowerMock en proyectos de Android?
  • Android: Unidad de pruebas de aplicaciones Android con Robolectric y Mockito
  • ¿Cómo los métodos de prueba de unidad publicados por Event Bus en android?
  • TDD en Android con Robolectric y Mockito
  • Android Tests: Stubbing Out Retrofit con Mockito
  • Necesita ayuda para escribir una prueba de unidad usando Mockito y JUnit4
  • Vinculación de Android y prueba JUnit de notificación
  • Junit / Mockito - esperar la ejecución del método
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.