【发布时间】:2020-04-25 01:40:00
【问题描述】:
我正在尝试为我的 spring 服务器编写一个单元测试。
首先它将检查存储库中是否存在用户名,如果没有,则用户名可用,然后它将返回 true,然后我将该用户名保存到我的存储库并检查是否可用而不应该返回假的。
这是我的代码:
@Test
public void availableTest() {
String username="some_username";
LoginCredential lc=new LoginCredential();
lc.setUsername(username);
lc.setPasswordHash("1");
lc.setSessionID(0);
assertEquals(true, loginCredentialService.available(username));
loginCredentialRepository.save(lc);
assertEquals(false, loginCredentialService.available(username));
}
但由于某种原因,对于最后一个assertEquals,它给了我错误。所以我可以说,数据没有保存在存储库中,因为我已经使用邮递员测试了我的 API。
那么如何解决呢?
我认为测试类已正确注释:
@RunWith(SpringRunner.class)
@SpringBootTest
public class MainApplicationTests {
@Autowired
private LoginCredentialService loginCredentialService;
@MockBean
private LoginCredentialRepository loginCredentialRepository;
...
【问题讨论】:
-
您的存储库是模拟的,因此它实际上不会在数据库中保存任何内容
-
@EamonScullion 用于测试目的我应该如何保存,暂时?
-
去掉mock,注入真正的LoginCredentialRepository,但是你需要配置数据库,确保它运行等等。用mock进行单元测试实际上要好很多,你可以在验证(用Mockito)你的 loginCredentialRepository.save() 方法被调用的测试,这应该足以验证你的代码可以创建记录。
-
@MaifeeUlAsad 研究使用 H2(内存数据库)进行集成测试,您可以使用它来测试无需模拟的数据库交互
标签: spring spring-boot jpa testing h2