Java 如何将mock注入到需要构造函数参数的bean中
我有一个springbean原型,它有一些注入依赖项,也有一些构造函数参数Java 如何将mock注入到需要构造函数参数的bean中,java,spring,junit,mockito,Java,Spring,Junit,Mockito,我有一个springbean原型,它有一些注入依赖项,也有一些构造函数参数 公共BeanA{ @注入私人BeanB BeanB; 私有字符串arg; 公共BeanA(字符串arg){ this.arg=arg; } 公共无效方法测试(){ // ... // ... // ... } } 我想对这个类进行单元测试,模拟我注入的BeanB 通常,我会使用@InjectMocks在BeanA内部启动模拟 我怎样才能做到这一点?到目前为止,我不想在构造函数中注入BeanB,因为它会混合业务参数和依赖
公共BeanA{
@注入私人BeanB BeanB;
私有字符串arg;
公共BeanA(字符串arg){
this.arg=arg;
}
公共无效方法测试(){
// ...
// ...
// ...
}
}
我想对这个类进行单元测试,模拟我注入的BeanB
通常,我会使用@InjectMocks
在BeanA
内部启动模拟
我怎样才能做到这一点?到目前为止,我不想在构造函数中注入
BeanB
,因为它会混合业务参数和依赖项。为什么要将字段注入和构造函数注入混合在一起?我根本不推荐现场注入,特别是因为它们很难进行单元测试。
如果你想混合注射剂,这可能会有帮助:
或者可以使用反射将模拟的BeanB
设置为BeanA
Spring有一个
ReflectionTestUtils
,可用于将模拟注入字段
@ExtendWith(MockitoExtension.class)
类BeanATest{
私人比纳比纳;
@模拟私人海滩;
无效设置(字符串参数){
beanA=新beanA(arg);
设置域(beanA,“beanB”,beanB);
}
@试验
无效测试(){
字符串arg=“arg”;
设置(arg);
// ...
beanA.methodToTest();
// ...
}
}
我混合了字段注入和构造函数注入,因为我的原型bean存储状态(出于性能目的)。因此,我的构造函数参数与业务相关,我的字段注入将连接依赖项以使其工作。这有意义吗?很好!我从春天开始用ReflectionTestUtils设置私有字段。