2015-06-24 2 views
4

Я новичок в библиотеке Mockito и где-то застрял.Spring JpaRepository save() не издевается над использованием Mockito

Проблема в том, что я издеваюсь над сохранением метода Spring jpaRepository. Я всегда получаю null. Я использую такой код в своем проекте, но для тестирования я сделал фиктивный код для тестирования. Это мой код:

// This is the class for which I am making test case 
    @Service("deviceManagementService") 
    @Scope(BRASSConstants.SCOPE_SESSION) 
    @Transactional 
    public class DeviceManagementServiceImpl implements DeviceManagementService { 

     public String show(){ 
      Device device = new Device() ; 
      device.setContactName("abc"); 
      Device deviceEntity = deviceDao.save(device); 
      System.out.println(deviceEntity); // i get this null always Why ??? 
      return "demo"; 
     } 
    } 

И тест я пишу это:

@RunWith(MockitoJUnitRunner.class) 
    public class DemoTest { 

     @InjectMocks 
     private DeviceManagementServiceImpl deviceManagementServiceImpl; 

     @Mock 
     private DeviceDao deviceDao; 

     @Before 
     public void setUp() throws Exception { 
      MockitoAnnotations.initMocks(this); 
     } 

     @Test 
     public void show(){ 
      Device device = new Device() ; 
      Device deviceEntity = new Device() ; 
      deviceEntity.setDeviceId(12L); 
      Mockito.when(deviceDao.save(device)).thenReturn(deviceEntity); 

      Mockito.when(deviceManagementServiceImpl.show()).thenReturn(null) ; 
     } 

    } 

Если я использую что-то вроде этого

Mockito.when(deviceDao.findByDeviceSerialNo("234er")).thenReturn(deviceEntity); 

Тогда он работает и дает мне не нулевой объект устройства.

В чем причина этого?

+0

_Then он работает и не дает мне нулевой объект Device._ В чем проблема? не нулевой объект? – Nirmal

ответ

14

Вы настроить ваш макет, чтобы вернуть то, что, когда он получает заданное Objet устройства:

 Device device = new Device() ; 
     Mockito.when(deviceDao.save(device)).thenReturn(deviceEntity); 

Это говорит ваш deviceDao издеваться вернуть deviceEntity, когда он получает device в качестве параметра метода save.

Mockito использует equals для аргумент сопоставив. Это означает, что если вы вызываете deviceDao.save(x), то x.equals(device) будет возвращен deviceEntity.

Ваш метод:

public String show(){ 
     Device device = new Device() ; 
     device.setContactName("abc"); 
     Device deviceEntity = deviceDao.save(device); 
     System.out.println(deviceEntity); // i get this null always Why ??? 
     return "demo"; 
} 

Это вызывает save() на новом Device инстанции. Я очень сомневаюсь, что этот device равен тому, с которым вы настроились.

Одним из способов решения этой проблемы является использование более широким Искателя в тесте:

Mockito.when(deviceDao.save(any(Device.class)).thenReturn(deviceEntity); 

или просто для того, чтобы Device, что вы настроить ваш макет с таким же, как тот, который используется в Вашем коде , Я не могу представить вам пример, так как ваш вопрос не включает код для Device.equals().

+1

любой (Device.class) работал для меня ...! – Shamseer

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