使用差分bean服务的JavaSpring测试
我想测试服务A,它有一个方法methodA1,A指的是服务B,它有一个方法methodB1
在methodB1中,在methodA1中调用
@Service
class A{
@Autowired
B b;
void methodA1{
....
b.methodB1();
.....
}
}
@Service
class B{
void methodB1{
....
}
}
现在,我想测试methodA1,但是methodB1需要被重写,所以我创建了一个新的类BMock
@Service("bMock")
class BMock execute B{
@Override
void methodB1{
....
}
}
测试用例如下:
class testClass extends springTest{
@Autowired
A a;
@Autowired
@Qualifier("bMock")
B b;
@Test
public void testMethodA1(){
a.methodA1();
}
}
实际上,methodA1总是在类B中调用methodB1,我想让它在测试用例中调用BMock,怎么做
# 1 楼答案
如果在类a中有
b
的setter,请在测试中明确重写它:如果没有setter(并且不想创建它),可以使用反射:
它打破了私人领域的隔离,但可能可以接受测试
# 2 楼答案
Spring Re-Inject可以用来在测试环境中用mock替换bean
并从BMock中删除@Qualifier和@Service