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