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注释,所以我使用创建测试AuthenticationManagerMyControllerSpringJUnit4ClassRunner

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

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

我绝对不想模拟整个对象图。我宁愿它停止在嘲笑服务。我该怎么做呢?

你的MyService应该实现一个接口,你应该模拟接口而不是类。这样就不需要DAO实现了。您可能也会遇到我在Jersey中测试JAX-RS资源类时遇到的类似问题。问题是如何将单个bean部署到Spring容器中,但模拟其依赖关系。我写了一篇关于它的博文,如果这是你所面临的问题,可能会对你有所帮助。特别是,最终的解决方案可能会有所帮助。

相关内容

  • 没有找到相关文章

最新更新