gpt4 book ai didi

java - 在不同条件的循环内模拟相同方法获得相同结果

转载 作者:行者123 更新时间:2023-12-02 11:07:50 25 4
gpt4 key购买 nike

我正在尝试在不同的条件下多次测试方法。这些条件取决于从测试方法内部调用的方法返回的值。然而我一次又一次收到相同的结果。

@Test
public void testMethod() {
try {
TestBn testBn = getTestBn();
when(mockDatabase.getDBConnection()).thenReturn(conn);
PowerMockito.doNothing().when(mockDatabase).closeDBConnection();

List<String> accListForCurrentYear = new ArrayList<>();
accListForCurrentYear.add("Test String 1");
accListForCurrentYear.add("Test String 2");
accListForCurrentYear.add("Test String 3");
accListForCurrentYear.add("Test String 4");

for (String accStr : accListForCurrentYear)
{
AccountTypeBn acctypeDto = new AccountTypeBn();
acctypeDto.setAccountTypes(accStr);
when(mockOnlineClaimDAO.getAccountType(Mockito.any(Connection.class), Mockito.anyString(),
Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(Date.class),
Mockito.any(Date.class))).thenReturn(acctypeDto);

UserDetailsBn usrDtlsBn = getCommonUserDetails();
TestBn newTestBn = mockClaimBO.validateInitialClaimDtls(usrDtlsBn, TestBn); //Method to be tested
for (ResultBn resultBn : newTestBn.getAccbnList())
{
System.out.println("Property1 : "+resultBn.getProperty1());
System.out.println("Property2 : "+resultBn.getProperty2());
System.out.println("Property3 : "+resultBn.getProperty3());
System.out.println("Property4 : "+resultBn.getProperty4());
System.out.println("-----------------------------------");
}
}

} catch (Exception e) {
fail("### testMethod ### Failed with following error: " + getStackTrace(e));
}
}

我收到相同的输出(第一次迭代后存储的属性)。

最佳答案

我认为您的函数 mockOnlineClaimDAO.getAccountType 始终返回相同的对象。

最好的解决方案是使用 eq 为您的 mockOnlineClaimDAO.getAccountType 函数定义一个唯一的匹配器,因为现在您只使用通配符匹配器。示例:

when(mockOnlineClaimDAO.getAccountType(Mockito.any(Connection.class), Mockito.eq(accStr),...`

您的另一个选择是使用连续 stub 。然后,您必须添加多个 thenReturn 语句:

when(mockOnlineClaimDAO.getAccountType(Mockito.any(Connection.class), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(Date.class), Mockito.any(Date.class)))
.thenReturn(new AccountTypeBn("Test String 1"))
.thenReturn(new AccountTypeBn("Test String 2"))
.thenReturn(new AccountTypeBn("Test String 3"))
.thenReturn(new AccountTypeBn("Test String 4"));

或者在 1 个 thenReturn block 中传递所有返回值:

when(mockOnlineClaimDAO.getAccountType(Mockito.any(Connection.class), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.anyString(), Mockito.any(Date.class), Mockito.any(Date.class)))
.thenReturn(new AccountTypeBn("Test String 1"), new AccountTypeBn("Test String 2"), new AccountTypeBn("Test String 3"));

每次调用 stub 函数时,都会返回下一个对象。

关于java - 在不同条件的循环内模拟相同方法获得相同结果,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/50817033/

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