gpt4 book ai didi

java - Spring JpaRepository save() 不使用 Mockito 模拟

转载 作者:IT老高 更新时间:2023-10-28 13:55:59 26 4
gpt4 key购买 nike

我是 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); 

然后它可以工作并给我设备的非空对象。

这是什么原因?

最佳答案

您将模拟设置为在收到给定的设备对象时返回一些内容:

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

这告诉你的 deviceDao模拟返回 deviceEntity当它收到 device作为 save 的参数方法。

Mockito 使用 equals用于参数匹配。这意味着如果您调用 deviceDao.save(x) , deviceEntity将返回 x.equals(device)是真的。

你的方法:

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() 的代码.

关于java - Spring JpaRepository save() 不使用 Mockito 模拟,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31028359/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com