gpt4 book ai didi

java - Mockito - 所需返回的模拟对象未在测试类(CUT)中使用

转载 作者:行者123 更新时间:2023-12-02 05:18:51 24 4
gpt4 key购买 nike

我正在尝试处理 Mockito,并且遇到了一种情况,我想使用测试类 (CUT) 中的模拟对象,但它似乎不起作用。我很确定我正在错误地接近解决方案。这是一些代码:

剪切:

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

}

Spring 配置:

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

我想做的是验证在从第 3 方类的响应返回“BOB”消息字符串的情况下是否调用了 CUT 的“if”条件部分(引发异常) (BP 服务)。然而,发生的情况是,当我在上面的“when”语句中运行我的mockTestClassFacade时,我试图在上面的“when”语句中返回的“invalidResponse”对象实际上并没有被返回。相反,

InterfaceBPServiceResponse serviceResponse = bpService.getProduct(bpRequestVO);

在我的测试过程中,正在调用真实方法中的行并使用“serviceResponse”。

在这种情况下如何让我的mockTestClassFacade使用我的“invalidServiceResponse”?

非常感谢...如果有任何不清楚的地方请告诉我!

最佳答案

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

您正在模拟并将 InterfaceBP 注入(inject)到 TestClassFacade 中,但在方法 getTestData 中,您正在创建一个新的 InterfaceBP 来自 BPFactory

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

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

关于java - Mockito - 所需返回的模拟对象未在测试类(CUT)中使用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26662309/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com