java - 如何为此方法创建单元测试?
问题描述
如何为此服务创建单元测试:
public class UserService {
private Map<String, User> userStorage = new HashMap<>();
public void saveOrUpdate(User user) {
User userFromStorage = userStorage.get(user.getId());
if (userFromStorage == null) {
userStorage.put(user.getId(), user);
} else {
userFromStorage.setName(user.getName());
userStorage.put(userFromStorage.getId(), userFromStorage);
}
}
}
如何检查用户是否成功创建或更新?
我可以更改void
并User
返回更新的用户并创建它:
assertEquals(user.getName(), updatedUser.getName())
但是如果我不能更改方法签名怎么办?我该如何测试它?
解决方案
你嘲笑 theuserStorage
和 pass User
。
@RunWith(MockitoJunitRunner.class)
class UserServiceTest {
@InjectMocks private UserService sut;
@Mock private Map<String, User> storage;
@Test
public void testUpdate() {
final String ID = "1";
// setup user passed to method
User user = mock(User.class);
when(user.getId()).thenReturn(ID);
when(user.getName()).thenReturn("name");
// setup user already known to service
User fromStorage = mock(User.class);
when(fromStorage.getId()).thenReturn(ID);
when(storage.get(ID)).thenReturn(fromStorage);
// run method under test
sut.saveOrUpdate(user);
// check update was performed and storage updated
verify(fromStorage).setName("name");
verify(storage).put(ID, fromStorage);
}
}
我会把save
路留给你;实际上更简单。
推荐阅读
- c# - 无法使用让我们将证书加密到 Azure Web App
- docker - 使用 Docker 运行 Jmeter Webdriver 测试给了我 CannotResolveClassException
- sas - 如何编写一个为每个独特的人创建图表的 Do-Loop?
- c# - 多重性在 Role '中无效。从属角色的多重性的上限必须为“1”
- c# - 在推送新元素之前删除数组的第一个元素
- c# - 将多个 LInq 选择器表达式组合成一个表达式
- javascript - 从服务器到客户端的实时图像流
- python - 如何使用字符串重命名我的数据框?
- c - C:将整数数组打印为二进制数据
- c# - 重新启动调试会话后出现 FatalExecutionEngineError