gpt4 book ai didi

java - Spring/Maven 项目中的 Junit 测试

转载 作者:行者123 更新时间:2023-12-02 04:24:07 24 4
gpt4 key购买 nike

我在为 Spring 项目编写 Junit 测试用例时遇到问题。其关于以下方法;

boolean doesUserIdExist(String userId){
if(userRepository.findOne(userId.toLowerCase()) != null) {
throw new userAlreadyExistsException("User with id: " + userId + " already exists")
return false;
}else{
return true;
}
}

现在在我的 jUnit 中我写了这样的东西..:

void compareDuplicateUserIdTest (){

UserService UserService = new UserService();

String lowercase = "test";
String uppercase = "Test";

boolean result = userService.doesUserIdExist(lowercase);

//Check the boolean result if its true

}

由于我使用 findOne 方法,这意味着我必须根据数据库 userId =“test”检查 String =“test”。这不是正确的方法,因为它应该独立工作,而 MongoDB 数据库中没有任何记录。

现在我一直在阅读像mockito这样的框架来测试这个,但是对于如此简单的方法检查来说这不是“太多”了吗?我可以删除 findOne 部分并只比较字符串吗?

最佳答案

您面临着一个非常常见的单元测试问题,即不应涉及数据库(这将是集成测试),所以...这就是 Mockito 是一个很好用的工具的地方。

使用 Mockito 允许您模拟数据库结果并继续方法的常规流程,因此您可以执行以下操作:

import static org.junit.Assert.assertTrue;
import static org.mockito.Mockito.when;

@RunWith(MockitoJUnitRunner.class)
public class UserService_doesUserIdExistTests
{

@Mock
private UserRepository userRepository;

@InjectMocks
private UserService userService;

@Test
void compareDuplicateUserIdTest() {

String lowercase = "test";

// Mocking the response for your method that uses external dependencies
when(userRepository.findOne(lowercase)).thenReturn(true); // You can mock the response you want using .thenReturn(...)

// Test your userService method (you can also debug it if needed)
boolean result = userService.doesUserIdExist(lowercase);

//Check the boolean result if its true
assertTrue(result);
}
}

我尚未测试代码,但展示了将 userService.doesUserIdExist(...) 方法作为一个单元进行测试的想法。当您需要通过调试代码来学习时,这也非常有帮助。

关于java - Spring/Maven 项目中的 Junit 测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32400617/

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