为什么JMockit不会使用这个(显然)有效的Injectable?

时间:2014-06-15 21:34:45

标签: java junit4 jmockit

我最近重构了我的一个类,在其构造函数中接受了一个可迭代的泛型对象,现在无法让JMockit实例化测试类的@Tested字段。这是一个精简的测试案例,它表现出同样的问题:

import java.util.Collections;
import mockit.Injectable;
import mockit.Tested;
import org.junit.Test;

public class FooTest {
    public static interface Generic<T> {}

    public static class Foo<T> implements Generic<T> {
        public Foo(Iterable<Generic<T>> iterable) {}
    }

    @Tested Foo<Object> tested;
    @Injectable Iterable<Generic<Object>> injectable = Collections.emptyList();

    @Test
    public void testFoo() {
        // java.lang.IllegalArgumentException: No constructor in class FooTest$Foo that can be satisfied by available injectables
    }
}

我意识到我可以通过在tested方法中创建@Before来解决这个问题,但我想先了解为什么会失败。 : - )

我正在使用Java 1.7.0_51,JMockit 1.8和JUnit 4.11。

1 个答案:

答案 0 :(得分:1)

从JMockit 1.8开始,@Tested功能尚不完全支持通用类型参数。

也就是说,JMockit 1.9(即将于6月22日发布)增加了对此类场景的支持。