Java 使用以下方法Mockito.when()、PowerMockito.when()、Mockito.doReturn()时无法返回值

Java 使用以下方法Mockito.when()、PowerMockito.when()、Mockito.doReturn()时无法返回值,java,unit-testing,mockito,junit4,powermockito,Java,Unit Testing,Mockito,Junit4,Powermockito,以下是我的课程 我有一个与以下方法的接口 接口如下所示,并具有以下方法之一 public interface SimpleDocumentManager{ public List getUserDocIdOfRelatedDocumentsForTemplate(String docType, List<String> templateNames,ZoneCriteria mainZoneCriteria,List<ZoneCriteria> detailZon

以下是我的课程

我有一个与以下方法的接口

接口如下所示,并具有以下方法之一

public interface SimpleDocumentManager{

    public List getUserDocIdOfRelatedDocumentsForTemplate(String docType, List<String> templateNames,ZoneCriteria mainZoneCriteria,List<ZoneCriteria> detailZoneCriteria);
    }
当我调用SimpleDocumentManager中的方法时,上面的方法被用作返回ZoneCriteria的参数之一

这是我的子类测试用例

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

    }
但是没有一个调用返回值。调试代码时,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\u名称,Arrays.asList(getOriginalTemplateName())、getCriteriaMap(primaryRow)、Collections.emptyList()被调用时

被称为“我想返回
列表”
,因此我正在执行此操作

Map<String, Object> map = new HashMap<String, Object>();
map.put("USER_DOC_ID", "POR0000001");
List<Map<String, Object>> asList = Arrays.asList(map);
Map Map=newhashmap();
map.put(“用户文档ID”,“POR0000001”);
List asList=Arrays.asList(map);
我在thenReturn()中返回asList,如下所示thenReturn(asList)

在准备ZoneCriteria时,我检查一个值,如果该值不存在,我会抛出用户定义的异常

因此,当我执行测试用例时,我得到的是验证异常,它应该返回我准备的列表

我在堆栈溢出中通过了不同的链接,无法得到我的答案。以下是链接。


请帮助

我还模拟了地图,并列出如下地图map=Mockito.mock(HashMap.class);put(RuntimeDocumentConstants.USER_DOC_ID,“POR0000001”);List asList=Mockito.mock(ArrayList.class);这里发生了很多事情,但我看到的一个直接问题是,您似乎没有设置要正确模拟的静态方法调用
ServiceLocatorBeanFactory.getService()
。请参阅。@ach-我的测试类中已经有了该代码,模拟了我在此处添加该代码时遗漏的ServiceLocatorBeanFactory。现在,我在测试类中添加了相同的内容。尽管我正在使用PowerMockito(一个静态类)模拟ServiceLocatorBeanFactory,但我仍然面临这个问题issue@AvinashReddy你能发布你正在使用的断言语句吗?@Lencalot我想我已经解决了问题。方法getSimpleDocumentManager();在内部调用了另一个名为getCriteriaMap(primaryRow)的方法,该方法在未找到值时存在验证错误。我没有传递该方法的预期值。一旦传递了值。我的方法被嘲弄或被打断,开始起作用了
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());
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();
Map<String, Object> map = new HashMap<String, Object>();
map.put("USER_DOC_ID", "POR0000001");
List<Map<String, Object>> asList = Arrays.asList(map);