최근에 생성자에서 일반 객체의 반복 가능한 객체를 허용하도록 클래스 중 하나를 리팩토링했으며 이제는 JMockit이 테스트 클래스의 @Tested
필드를 인스턴스화 할 수 없습니다. 여기에 같은 문제를 전시 벗겨진 다운 테스트 케이스의 :JMockit이 (분명히) 유효한 주사 기능을 사용하지 않는 이유는 무엇입니까?
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
}
}
내가 하찮게 @Before
방법에서 만든 tested
에 의해이 문제를 해결할 수있는 실현,하지만 난이 실패하는 이유를 먼저 이해하고 싶다. :-)
Java 1.7.0_51, JMockit 1.8 및 JUnit 4.11을 사용하고 있습니다.
JMockit을 모르지만'Foo'는'static'으로 선언해야합니까? 그렇지 않으면 암시 적으로 제공 될 필요가있는'FooTest.this' 인스턴스가 있습니다. –
@ DanielPryden 테스트 케이스를 단순화하는 실수였습니다. 인터페이스와 클래스가 정적이면 (mis?) 동작은 동일합니다. –