Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/typo3/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何将mock注入到需要构造函数参数的bean中_Java_Spring_Junit_Mockito - Fatal编程技术网

Java 如何将mock注入到需要构造函数参数的bean中

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,因为它会混合业务参数和依赖

我有一个springbean原型,它有一些注入依赖项,也有一些构造函数参数

公共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设置私有字段。