我最近重构了我的一个类,以在其构造函数中接受可迭代的通用对象,现在无法获取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日发布)增加了对这种情况的支持。