2016-08-25 2 views
0

스프링 컨테이너로 주입되는 방법을 모의 주입 방법으로 모의 할 수있는 방법이 있습니까? 모킹 스프링 IOC 방법의 주입 방법

내가 그것을

public abstract class Singleton { 

    protected abstract LoanField check(); 

    private LoanField getLoanField(String name) { 

    LoanField field = check(); 

} 

하고 구성을 해당 이제 스프링 설정 파일 중 하나가 추상 메소드가 싱글이라는 추상 클래스가 나를

세부

설명해 보자. 여기
<bean id="checkDetails" class="com.abc.tools.Singleton"> 
     <lookup-method name="check" bean="field"/> 
    </bean> 

    <bean id="field" class="com.abc.tools.LoanField" scope="prototype"/> 

는 여기에 방법 사출 봄 짧은

Singleton fieldManager = Mockito.mock(Singleton.class, Mockito.CALLS_REAL_METHODS); 
LoanField loanField = PowerMockito.mock(LoanField.class); 
PowerMockito.when(fieldManager.create()).thenReturn(loanField); 

실제 문제에서 내 테스트 클래스 추상 클래스의 주어진 추상적 인 방법을 무시하고, 오버라이드 (override) 된 메소드의 구현하지만, 때를 제공하는 전 추상적 인 방법을 스텁

java.lang.AbstractMethodError: com.abc.tools.Singleton.create()Lcom/abc/tools/LoanField; 
at com.abc.tools.SingletonTest.loanFiledNotNull(SingletonTest.java:141) 
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) 
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57) 
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) 
at java.lang.reflect.Method.invoke(Method.java:601) 
at org.junit.internal.runners.TestMethod.invoke(TestMethod.java:66) 
at 

내가이 가능하지 알고 난 오류가 아래지고있어 내 테스트 클래스에서 그 방법을 스텁하려고하지만, 모든 작업은 일을 스텁 주위에있다 전자 방법? 제발 도와주세요.

시 : 나는 @preparefortest

+0

테스트 코드 표시 –

+0

@Nir Levy는 테스트 클래스 코드 스 니펫 –

답변

0

당신의 abstravct 클래스, 더미 구현을 추가하고이 클래스를 테스트를 확장 더미 클래스를 확인 모든 의존 된 클래스를 언급했다.

0

스파이와 시도는

Singleton s = new Singleton(){ 

    private LoanField getLoanField(String name) { 

     LoanField field = check(); 

    } 

    protected LoanField check(){ 
     return new LoanField(); 
    } 

    } 

    Singleton fieldManager = spy(s); 
    LoanField loanField = mock(LoanField.class); 
    when(fieldManager.create()).thenReturn(loanField); 
+0

을 추가했습니다. http://stackoverflow.com/questions/1087339/using-mockito-to-test-abstract-classes –

0

객체가 방법 주입을 통해 생성되는 경우, 가장 좋은 방법은 테스트 코드의 상단에 코드 아래 사용은이 순간 우리는 테스트 케이스 @contextconfiguration가에 대한 객체를 생성합니다 실행 추상 클래스뿐만 아니라 추상 메소드도 보유하게됩니다.

@RunWith(MockitoJUnitRunner.class) 
@PrepareForTest({LoggerFactory.class,Class.class}) 
@ContextConfiguration("file:src/test/resources/META-INF/spring-config-test.xml") 
public class TestClass { 

기본적으로 실제 xml 파일과 동일한 test xml 파일을 가져와 @contextConfiguration을 사용하여로드해야합니다.

감사합니다.