我最近重构了我的一个类,以在其构造函数中接受可迭代的通用对象,现在无法获取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。

最佳答案

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

也就是说,JMockit 1.9(即将在6月22日发布)增加了对这种情况的支持。

07-27 14:05