2016-08-25 4 views
0

Есть ли способ издеваться над методом, который вводится весенним контейнером с использованием метода инъекции методом.Mocking spring метод метода IOC метод

Позвольте мне объяснить подробно

У меня есть абстрактный класс под названием Singleton, который имеет абстрактный метод в нем

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); 

Актуальной проблемой здесь является, в методе инъекционной пружины перекрывает данный абстрактный метод абстрактного класса и обеспечивает реализацию переопределенного метода, но когда я попытаться окурок этого метода в моем тестовом классе я получаю ниже ошибок

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 

я знаю его не представляется возможным окурок абстрактного метода, но есть ли работа вокруг незавершенной-го e метод? Пожалуйста, помогите мне.

Ps: Я упомянул все зависит класс в @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-файл, который так же, как реальный файл XML и загрузить его с помощью @contextConfiguration.

Спасибо.

Смежные вопросы