Mockito-Desired返回的mock对象没有在测试中的类(CUT)中使用



我正试图获得Mockito的句柄,但遇到了这样的情况:我想使用测试类(CUT)中的mock对象,但它似乎不起作用。我很确定我对解决方案的处理是错误的。这里有一些代码:

切割:

public class TestClassFacade {
  // injected via Spring
  private InterfaceBP bpService;
  public void setBpService(InterfaceBP bpService) {
      this.bpService = bpService;
  }
  public TestVO getTestData(String testString) throws Exception {
    bpService = BPFactory.getSpecificBP();
    BPRequestVO bpRequestVO = new BPRequestVO();
    InterfaceBPServiceResponse serviceResponse = bpService.getProduct(bpRequestVO);
    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;
    String testString = "ThisIsATestString";
    BPRequestVO someBPRequestVO = new BPRequestVO();
    InterfaceBPServiceResponse invalidServiceResponse = new BPServiceResponse();
    @Test (expected = Exception.class)
    public void getBPData_bobStatusCode_shouldThrowException() throws Exception {
        invalidServiceResponse.setMessage("BOB");
        when(mockBPService.getProduct(someBPRequestVO)).thenReturn(invalidServiceResponse);
        mockTestClassFacade.getTestData(testString);
        verify(mockBPService.getProduct(someBPRequestVO));
    }
}

我试图做的是验证在从第三方类(BPService)的响应返回"BOB"消息字符串的情况下,CUT的"if"条件部分(抛出异常)是否被调用。然而,当我在上面的"when"语句中运行mockTestClassFacade时,我试图返回的"invalidResponse"对象实际上并没有返回

InterfaceBPServiceResponse serviceResponse = bpService.getProduct(bpRequestVO);

实际方法中的行正在被调用,并且在我的测试过程中使用了"serviceResponse"。

在这种情况下,我如何让我的mockTestClassFacade使用我的"invalidServiceResponse"

非常感谢。。。如果有什么不清楚的地方,请告诉我!

我认为问题出在bpService = BPFactory.getSpecificBP();中。

您正在嘲笑InterfaceBP并将其注入到TestClassFacade中,但在方法getTestData中,您正在从BPFactory创建一个新的InterfaceBP

因此,在测试时,您实际上并没有使用mock,而是使用不同的对象。

如果InterfaceBP是由Spring创建和注入的,则不需要工厂来获取实例。

从另一个答案继续,您需要模拟"BPFactory.getSpecificBP()"的行为,但Mockito不允许您模拟静态方法。您必须使用PowerMock进行此测试。

相关内容

  • 没有找到相关文章

最新更新