春天& Mockito - 忽略传递依赖

时间:2011-07-19 14:34:09

标签: unit-testing spring mockito

我有一个分层的应用程序,如下所示:

@PreAuthorize('isAuthenticated()')
@Controller
public class MyController {
    @Autowired
    MyService service;
}

@Service 
public class MyService {
    @Autowired
    MyDao dao;
}

public interface MyDao {
}

@Repository
public class MyDaoImpl implements MyDao {
}

我想测试依赖于AOP的@PreAuthorize注释,因此我使用SpringJUnit4ClassRunner来创建测试AuthenticationManagerMyController

如果@ContextConfiguration不包含任何匹配MyService的bean,则测试初始化​​失败,因为它无法解析bean。

如果我不需要AOP,我会使用Mockito测试运行器并注入Mockito.mock(MyService.class)。但是如果我尝试使用spring runner,那么我的测试再次失败,因为它无法解析服务的MyDao(即使服务是模拟的)。

我绝对不想模仿整个对象图。我宁愿停止使用模拟服务。我该怎么办?

1 个答案:

答案 0 :(得分:2)

您的MyService应该实现一个接口,您应该模拟接口而不是类。那么您将不需要DAO实现。您可能也可能遇到类似的问题,我在尝试测试Jersey中的JAX-RS资源类时遇到了这个问题。问题是如何将单个bean部署到Spring容器中,但是模拟其依赖项。我写了一个blog post就可以帮助你解决这个问题。特别是,final solution可能会有所帮助。