依赖注入可以帮助您很好地对代码进行单元测试.但是我们如何测试是否在运行时最终注入了正确的依赖项?例如,我有一个服务类,它接收服务验证器列表.由于验证器列表是由DI容器注入的,我们如何确保注入正确的验证器?如果某些开发人员错误地从列表中删除了验证器,该怎么办?即使我们在依赖注入上编写测试,我们也无法在不破坏封装的情况下断言所有依赖项.唯一的方法是集成测试,它对服务的验证行为进行断言.如果服务行为很复杂,那么编写集成测试就变得很困难.有任何想法吗 ??
用你的问题来解释:
原文链接:/javaschema/281620.html我已经测试了我的应用程序的各个组件,它们都可以工作,但我怎么知道整个应用程序的工作原理?
好消息
考虑一下你所处的位置有多好,相比之下:
我现在已经编写了所有这些代码,我怎么知道应用程序是否有效?
您在单元测试中找到并删除了错误.依赖注入样式的编码使依赖关系变得清晰,并消除了对全局变量的依赖.这些技术本身意味着你会有更少的错误,特别是更少的错误,只有在整个应用程序放在一起时才能显示出来.
测试更大
现在,继续回答您的问题,您可以编写一个自动化测试来断言您的依赖注入容器返回了一个特定的验证器.更好的是,我赞成写作测试:
>向DI容器询问一个对象(后面是协作对象的图表,例如验证器列表)
>让对象执行它的功能(验证这些数据)
>断言结果(例如验证错误)
您可能希望使用test double替换访问数据库的某些对象,当前服务器时间,Web服务等.这很容易,因为您正在使用依赖注入.
除非一个类特别麻烦,否则我更愿意在这个级别进行测试,因为它允许更多的测试在重构中存活.如果作为较大测试的一部分进行练习,则圈复杂度为1的类不需要独立测试.具有较高圈复杂度的类可以.
很多测试,但它有效吗?
即便如此,你可能也在想,但整件事情有效吗?
要最终回答这个问题,您需要以最终形式测试应用程序.对于Web应用程序,这意味着将其部署在具有适当数据库和真实防火墙等的适当服务器上.然后,您可以使用Selenium等手动测试或测试.