在使用JMockit的JUnit测试中,我使用@Injectable
注释来初始化通过Spring DI初始化的生产代码中的字段。
我在几个类中使用了一个类型的实现。
为什么C
不是IC
的实现,而是在A
类型的模拟中注入,就像注入类型B
和D
一样以下提到的测试方法?
@Service
@Scope("prototype")
public class A {
@Autowired IC c;
public IC getC() { return c; }
// do something using C in the method body
public void doSomething() {}
}
@Service
@Scope("prototype")
public class B {
@Autowired IC c;
public IC getC() { return c; }
// do something using C in the method body
public void doSomething() {}
}
public interface IC { void doSomething(); }
@Service
@Scope("prototype")
public class C implements IC {
@Override
public void doSomething() {}
}
@Service
public class D {
@Autowired IC c;
@Autowired B b;
@Autowired A a;
public IC getC() { return c; }
public B getB() { return b; }
public A getA() { return a; }
}
public class TestClass {
@Tested(fullyInitialized = true) D d;
@Injectable IC c;
@Tested @Injectable A a;
@Tested @Injectable B b;
@Test
public void test() {
// expectations are recorded here
assertNotNull(d.getC());
assertNotNull(d.getB().getC());
// Null reference
assertNotNull(d.getA().getC());
}
}
修改
@Tested
已将C
的用例添加到代码示例中。注释已用于将C
注入A
和B
以最终在其某些方法中使用它。
编辑2:
允许以这种方式使用@Tested
为测试类中的多个字段扩展被测试的单元吗?
答案 0 :(得分:0)
此功能已在jmockit 1.25中修复。确保使用最新版本。