【发布时间】:2014-12-28 03:04:26
【问题描述】:
我正在尝试实现 Mockito 来测试特定方法,但 .thenReturn(...) 似乎总是返回一个空对象,而不是我想要的:
剪切:
public class TestClassFacade {
// injected via Spring
private InterfaceBP bpService;
public void setBpService(InterfaceBP bpService) {
this.bpService = bpService;
}
public TestVO getTestData(String testString) throws Exception {
BPRequestVO bpRequestVO = new BPRequestVO();
bpRequestVO.setGroupNumber(testString) ;
bpRequestVO.setProductType("ALL") ;
bpRequestVO.setProfileType("Required - TEST") ;
IBPServiceResponse serviceResponse = bpService.getProduct(bpRequestVO); //PROBLEM
if (serviceResponse.getMessage().equalsIgnoreCase("BOB")) {
throw new Exception();
} else {
TestVO testVO = new TestVO();
}
return testVO;
}
}
弹簧配置:
<bean id="testClass" class="com.foo.TestClassFacade">
<property name="bpService" ref="bpService" />
</bean>
<bean id="bpService" class="class.cloud.BPService" />
Mockito 测试方法:
@RunWith(MockitoJUnitRunner.class)
public class BaseTest {
@Mock BPService mockBPService;
@InjectMocks TestClassFacade mockTestClassFacade;
private String testString = null;
private BPRequestVO someBPRequestVO = new BPRequestVO();
private IBPServiceResponse invalidServiceResponse = new BPServiceResponse();
@Test (expected = Exception.class)
public void getBPData_bobStatusCode_shouldThrowException() throws Exception {
invalidServiceResponse.setMessage("BOB");
someBPRequestVO.setGroupNumber(null);
someBPRequestVO.setProductType("ALL");
someBPRequestVO.setProfileType("Required - TEST");
System.out.println("1: " + someBPRequestVO.getGroupNumber());
System.out.println("2: " + someBPRequestVO.getProductType());
System.out.println("3: " + someBPRequestVO.getProfileType());
System.out.println("4: " + someBPRequestVO.getEffectiveDate());
when(mockBPService.getProduct(someBPRequestVO)).thenReturn(invalidServiceResponse);
mockTestClassFacade.getTestData(testString);
verify(mockBPService).getProduct(someBPRequestVO);
}
}
系统输出:
1: null
2: ALL
3: Required - TEST
4: null
这里发生的情况是,当我运行测试时,serviceResponse 对象在上面标有 //PROBLEM 的 CUT 行上为空。我的愿望是用我的测试方法中的“invalidServiceResponse”对象填充该对象。从我的 System.out.println 的输出来看,我的 bpRequestVO 在内容上似乎与我的 someBPRequestVO 匹配。
谁能告诉我我在这里缺少什么?
感谢您的宝贵时间!
【问题讨论】:
-
它很可能无法将参数与您在 when(...) 中设置的 getProduct 与实际方法中传递的内容相匹配。尝试在 when(service.getProduct(argThat(...)).thenReturn 中使用匹配器。
-
OP:你应该接受@lewthor的回答;我弄错了,覆盖
.equals()就足够了,你不需要参数匹配器 -
感谢 fge 的跟进...我刚刚仅使用 .equals() 对其进行了测试,然后返回此页面以确保我没有误解某些内容。果然我找到了你的评论!我已经切换了接受的答案。谢谢你的诚实。