使用Mockito调用测试方法

时间:2015-06-24 08:17:00

标签: java spring unit-testing 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@Autowired中的Service)依次调用适当的方法。 但似乎我误解了关于嘲笑的事情。如果有人知道如何实现这一点,请帮助。提前谢谢。

1 个答案:

答案 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);