Ниже приведены мои классы
У меня есть интерфейс со следующим методом.
Интерфейс выглядит следующим образом и имеет один из методов
public interface SimpleDocumentManager{
public List getUserDocIdOfRelatedDocumentsForTemplate(String docType, List<String> templateNames,ZoneCriteria mainZoneCriteria,List<ZoneCriteria> detailZoneCriteria);
}
Примечание. ZoneCrieria — это класс POJO.
У меня есть абстрактный суперкласс и в нем есть метод инициализации, у меня также есть подкласс, который расширяет суперкласс и переопределяет метод инициализации, а в методе инициализации подкласса я вызываю соответствующий метод службы. Код для следующих классов выглядит следующим образом.
public abstract class Superclass{
public void init( ){
}
}
public class Subclass extends Superclass
{
public void init(){
List<Map<String, Object>> ordersList = getSimpleDocumentManager().getUserDocIdOfRelatedDocumentsForTemplate(OrderConstants.TYPE_NAME, Arrays.asList(getOriginalTemplateName()), getCriteriaMap(primaryRow), Collections.emptyList());
}
}
В приведенном выше методе для получения ZoneCriteria я написал частный метод в подклассе.
private ZoneCriteria getCriteriaMap(){
Some logic that returns the ZoneCriteria.
}
Вышеупомянутый метод используется как один из параметров, который возвращает ZoneCriteria, когда я вызываю метод, присутствующий в SimpleDocumentManager.
А вот мой тестовый пример для подкласса
@RunWith(PowerMockRunner.class)
@PrepareForTest({ServiceLocatorBeanFactory.class})
public class TestClass {
@Before
public void initialize(){
PowerMockito.mockStatic(ServiceLocatorBeanFactory.class);
PowerMockito.mockStatic(BusinessRulesUtil.class);
}
@Test
public void testSubclass(){
Map<String, Object> map = new HashMap<String, Object>();
map.put("ID, "POR0000001");
List<Map<String, Object>> asList = Arrays.asList(map);
SimpleDocumentManager simpleDocumentManager = Mockito.mock(SimpleDocumentManager.class);
PowerMockito.when(ServiceLocatorBeanFactory.getService(SimpleDocumentManager.class)).thenReturn(simpleDocumentManager);
PowerMockito.when(simpleDocumentManager.getUserDocIdOfRelatedDocumentsForTemplate(Mockito.anyString(),Mockito.anyList(),Mockito.any(ZoneCriteria.class),Mockito.anyList())).thenReturn(asList);
Mockito.when(simpleDocumentManager.getUserDocIdOfRelatedDocumentsForTemplate(Mockito.anyString(),Mockito.anyList(),Mockito.any(ZoneCriteria.class),Mockito.anyList())).thenReturn(asList);
Mockito.doReturn(asList).when(simpleDocumentManager).getUserDocIdOfRelatedDocumentsForTemplate(Mockito.anyString(),Mockito.anyList(),Mockito.any(ZoneCriteria.class),Mockito.anyList());
Subclass subclass = new Subclass();
subclass.init();
subclass = Mockito.spy(subclass);
subclass .init();
}
Я использовал три способа вернуть значение при вызове метода в SimpleDocumentManager. Ниже приведены три способа
1.PowerMockito.when(simpleDocumentManager.getUserDocIdOfRelatedDocumentsForTemplate(Mockito.anyString(),Mockito.anyList(),Mockito.any(ZoneCriteria.class),Mockito.anyList())).thenReturn(asList);
2.Mockito.when(simpleDocumentManager.getUserDocIdOfRelatedDocumentsForTemplate(Mockito.anyString(),Mockito.anyList(),Mockito.any(ZoneCriteria.class),Mockito.anyList())).thenReturn(asList);
3.Mockito.doReturn(asList).when(simpleDocumentManager).getUserDocIdOfRelatedDocumentsForTemplate(Mockito.anyString(),Mockito.anyList(),Mockito.any(ZoneCriteria.class),Mockito.anyList());
Но ни один из вызовов не возвращает мне значение. Когда я отлаживаю код, getSimpleDocumentManager() возвращает издевательский объект, но метод не вызывается.
Также я создал объект подкласса двумя способами. Это выглядит следующим образом
1. Directly instantiated the Subclass in test method as follows
Subclass subclass = new Subclass();
subclass.init();
2.Did a spy of the instantiated Subclass
Subclass subclass = new Subclass();
subclass = Mockito.spy(subclass );
subclass .init();
Когда метод getSimpleDocumentManager().getUserDocIdOfRelatedDocumentsForTemplate(OrderConstants.TYPE_NAME, Arrays.asList(getOriginalTemplateName()), getCriteriaMap(primaryRow), Collections.emptyList())
называется я хочу вернуть "List<Map<String, Object>>"
так что для этого я делаю это
Map<String, Object> map = new HashMap<String, Object>();
map.put("USER_DOC_ID", "POR0000001");
List<Map<String, Object>> asList = Arrays.asList(map);
и я возвращаю asList в thenReturn() следующим образом thenReturn(asList);
при подготовке ZoneCriteria я проверяю значение, и если это значение отсутствует, у меня возникает исключение UserDefined Exception.
Поэтому, когда я выполняю свой тестовый пример, я получаю это исключение проверки, вместо этого он должен возвращать список, который я подготовил.
Я просмотрел разные ссылки в переполнении стека и не смог получить ответ. Ниже приведены ссылки. Link1
Пожалуйста помоги
ServiceLocatorBeanFactory.getService()
для правильной имитации. Обратитесь к документации по фиктивному статическому методу. - person ach   schedule 27.01.2016