【发布时间】:2014-10-20 09:39:26
【问题描述】:
我想知道是否有办法模拟正在自动装配的字段。
考虑以下情况。
我有一个班级名称 A
public class A {
@Autowired
private B b;
public void aMethod() {
b.method();
}
}
另一个B类是这样的
public class B {
public void method() {
// some code
}
}
现在我想为该方法编写junit。
我知道有一种方法可以像这样模拟自动装配的字段。
public class TestA {
@InjectMock
private A a;
@Mock
private B b;
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
}
public void testAMethod() {
// write test case.
}
}
但我的问题是 -> 有没有办法在使用 new 创建对象后模拟方法内部的自动装配字段。
例如
public class TestA {
public void testAMethod() {
A a =new A();
// how to mock the B instance in it.
}
}
请建议或没有办法这样做????
我不想改变私有修饰符。我也不想添加 getter 和 setter 或反射。我只想知道在创建 A 类的新对象后是否有办法模拟 B 实例。
【问题讨论】:
-
您愿意使用反射吗?其他方法是使其受到保护,让您的测试类扩展 A 并直接设置它。
-
不,我想在没有反射或更改修饰符的情况下这样做。
-
没有反射就无法访问私有字段。如果有办法,私有将不再意味着私有。