我最近重构了我的一个类,在其构造函数中接受了一个可迭代的泛型对象,现在无法让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。
答案 0 :(得分:1)
从JMockit 1.8开始,@Tested
功能尚不完全支持通用类型参数。
也就是说,JMockit 1.9(即将于6月22日发布)增加了对此类场景的支持。