2014-06-15 5 views
1

최근에 생성자에서 일반 객체의 반복 가능한 객체를 허용하도록 클래스 중 하나를 리팩토링했으며 이제는 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을 사용하고 있습니다.

+0

JMockit을 모르지만'Foo'는'static'으로 선언해야합니까? 그렇지 않으면 암시 적으로 제공 될 필요가있는'FooTest.this' 인스턴스가 있습니다. –

+0

@ DanielPryden 테스트 케이스를 단순화하는 실수였습니다. 인터페이스와 클래스가 정적이면 (mis?) 동작은 동일합니다. –

답변

1

@Tested 기능은 아직 JMockit 1.8에서 일반 유형 매개 변수를 완전히 지원하지 않습니다.

즉, JMockit 1.9 (곧 출시 예정인 Jun 22)는이 시나리오와 같은 시나리오에 대한 지원을 추가한다고합니다.

+0

잘 알고 있습니다. 나는 지금 당장 그것을 해결할 것이다. –

관련 문제