使用 Mockito 测试方法调用

Test methods invocation with Mockito

我在我的 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)依次调用适当的方法。 但似乎我误解了一些关于模拟的东西。如果有人知道如何实现这一点,请提供帮助。提前致谢。

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

@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);