Spring JpaRepository save () ne se moque pas de Mockito

Je suis nouveau à la bibliothèque Mockito et coincé quelque part.

Le problème, c’est que lorsque je simule la méthode de sauvegarde de Spring jpaRepository, j’obtiens toujours la valeur null. J’utilise ce code dans mon projet, mais pour les tests, j’ai créé un code factice pour les tests. Ce sont mon code:

// This is the class for which I am making test case @Service("deviceManagementService") @Scope(BRASSConstants.SCOPE_SESSION) @Transactional public class DeviceManagementServiceImpl implements DeviceManagementService { public Ssortingng 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"; } } 

Et le cas de test que j’écris est:

  @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) ; } } 

Si j’utilise quelque chose comme ça

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

Ensuite, cela fonctionne et donnez-moi pas d’object null de Device.

Quelle est la raison pour ça?

Vous configurez votre maquette pour renvoyer quelque chose lorsqu’elle reçoit un object de périphérique donné:

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

Cela indique à votre deviceDao de renvoyer deviceEntity lorsqu’il reçoit un device tant que paramètre de la méthode de save .

Mockito utilise des équivalents pour la correspondance d’arguments. Cela signifie que si vous appelez deviceDao.save(x) , deviceEntity sera renvoyé si x.equals(device) est true.

Votre méthode:

 public Ssortingng 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"; } 

Cela appelle save() sur une nouvelle instance de Device . Je doute fortement que cet device soit égal à celui avec lequel vous avez configuré votre maquette.

Une façon de résoudre ce problème consiste à utiliser un matcher plus large dans votre test:

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

Ou simplement pour vous assurer que le Device lequel vous avez configuré votre maquette est identique à celui utilisé dans votre code. Je ne peux pas vous donner d’exemple, car votre question n’inclut pas le code de Device.equals() .