我们知道春季团队建议使用二次注射比场注射:
http://docs.spring.io/spring/docs/3.1.x/spring-framework-reference/html/beans.html#d0e2778
通过注入模拟也需要进行单元测试。
然而,有一点让我困扰的是,因为spring bean是单例,所以如果在代码的某些部分,通过使用setter方法注入不同的依赖关系来重新配置单例bean,那么代码的其他部分是会受到影响,这可能是不受欢迎的。例如,在代码的某些部分中注入特定的时钟实例,但可能是在代码的其他部分中不希望特定种类的时钟。
所以看起来,注册公司的注入为风险投资敞开了大门。同时我们需要一种机制来在测试期间注入一些模拟。我们怎样才能取得平衡?
此外,我们知道可变对象是不受欢迎的:
http://www.javapractices.com/topic/TopicAction.do?Id=15
那么使用可用于单例bean的setter方法还不错吗?
答案 0 :(得分:0)
这里听起来有点混乱,一方面你说:
通过注入模拟进行单元测试
在这里,您可以使用Mockito或标准JUnit测试来创建实例并注入相应的依赖项。
然后你继续说:
代码的其他部分将受到影响,这可能是不受欢迎的
不完全单元测试,但您可以使用@DirtiesContext
的Spring Test支持来确保如果您在一个测试中更改了依赖项,那么将为下一个测试重新加载上下文。
如果您确实需要更改实例字段但没有setter,作为最后的手段,您仍然可以使用ReflectionTestUtils
在测试期间更新字段。