gpt4 book ai didi

java - 使用 Mockito 测试方法调用

转载 作者:行者123 更新时间:2023-12-01 11:23:25 39 4
gpt4 key购买 nike

我在 DAO 和服务层中使用 Spring。现在我尝试使用 Mockito 框架测试这些层。我想要的只是检查是否调用了适当的方法。

这是我的配置,我在其中模拟所有必需的依赖项:

@Configuration
public class MockConfig
{
@Bean
public EntityManagerFactory entityManagerFactory()
{
return mock(EntityManagerFactory.class);
}

@Bean
public BaseRepositoryImpl baseRepositoryImpl()
{
return mock(BaseRepositoryImpl.class);
}

@Bean
public BaseServiceImpl baseServiceImpl()
{
return mock(BaseServiceImpl.class);
}
}

这就是我尝试测试的方法:

@ContextConfiguration(classes = MockConfig.class)
@RunWith(SpringJUnit4ClassRunner.class)
public class BaseServiceTest
{
@Autowired
private BaseService<Entity> service;

@Autowired
private BaseRepository<Entity> repository;

@Test
public void testSave()
{
Entity entity = new Entity("testId", "testName");
service.save(entity);

verify(service).save(entity);

//try to test that Service calls appropriate method on Repository
verify(repository).save(entity);
}

但是在 Repository 模拟上测试失败。我想确保 Service 调用适当的方法,然后调用其 Repository(即 Service 中的 @Autowired)依次调用相应的方法。但似乎我对模拟有一些误解。如果有人知道如何实现这一点,请提供帮助。提前致谢。

最佳答案

在这种情况下,您不应该 mock 您的服务。你的服务是被测试的对象;您需要它的实际实例。

@Configuration
@ComponentScan(basePackages = {"my.package.service"})
public class MockConfig {
@Bean
public BaseRepositoryImpl baseRepositoryImpl() {
return mock(BaseRepositoryImpl.class);
}
}

然后在您的测试中:

@Autowired
@InjectMocks
private BaseService<Entity> service;

最后,删除verify(service).save(entity);

关于java - 使用 Mockito 测试方法调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31021272/

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