为什么JMockit的@Injectable不适用于所有相关领域?

时间:2015-04-03 16:18:06

标签: unit-testing jmockit

在使用JMockit的JUnit测试中,我使用@Injectable注释来初始化通过Spring DI初始化的生产代码中的字段。

我在几个类中使用了一个类型的实现。 为什么C不是IC的实现,而是在A类型的模拟中注入,就像注入类型BD一样以下提到的测试方法?

@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注入AB以最终在其某些方法中使用它。

编辑2: 允许以这种方式使用@Tested为测试类中的多个字段扩展被测试的单元吗?

1 个答案:

答案 0 :(得分:0)

此功能已在jmockit 1.25中修复。确保使用最新版本。