我在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
(@Autowired
中的Service
)依次调用适当的方法。
但似乎我误解了关于嘲笑的事情。如果有人知道如何实现这一点,请帮助。提前谢谢。
答案 0 :(得分:1)
在这种情况下,你不应该嘲笑你的服务。您的服务是被测对象;你需要一个实际的实例。
@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);