我的代码:
class A extends X {
@Autowired
B b;
@Override
method() {
//do something
b.callMethodInB;
//do something
}
}
class B extends X {
@Autowired
C c;
@Override
method() {
//do something
c.callMethodInC;
//do something
}
}
我需要在method()
中测试A
。那么如何模仿B
。我正在使用Junit4和Jmockit。
答案 0 :(得分:9)
尝试这样的事情:
import org.junit.*;
import mockit.*;
public class ATest
{
@Tested A a;
@Injectable B b;
@Test
public void testMethod()
{
a.method();
new Verifications() {{ b.callMethodInB(); }};
}
}
JMockit使用注入的A
实例(来自模拟字段B
)自动实例化b
,并将其设置为测试类中的a
字段。这与使用的DI框架(Spring)无关。
答案 1 :(得分:0)
由于Mocking Frameworks通常依赖于DI(依赖注入),这基本上意味着您需要在方法签名中传输模拟对象,我不确定它是否可行。
但是看看here,它可能会给你一个如何做的方向。