如何验证模拟类的减法逻辑?单元测试分支验证求助
搞定非null分支的单元测试验证方案
我来帮你解决这个单元测试的瓶颈!针对你这段代码的非null分支,咱们可以通过模拟前置依赖+验证方法调用的方式来精准验证逻辑是否正确执行,下面分步骤给你拆解:
核心思路
要验证非null分支,我们需要:
- 模拟
dsIn.getItemNumber(1,"CC_FY_APPR_OBLIG_AMT")返回一个非null值 - 模拟
dsIn.getItemNumber(1,"CC_FY_APPR_OBLIG_YTD_AMT")的返回值(用于计算) - 执行目标代码后,验证
dsIn.setItemNumber是否传入了预期的计算结果
假设你用的是Java生态最常用的Mockito测试框架,具体实现如下:
1. 准备模拟对象
先在测试类里初始化dsIn的模拟实例:
@Mock private YourDsClass dsIn; // 替换成你实际的dsIn类名
2. 设定非null分支的前置条件
在测试方法中,给两个getItemNumber调用设定返回值:
// 模拟CC_FY_APPR_OBLIG_AMT返回非null值(比如100.0) when(dsIn.getItemNumber(1, "CC_FY_APPR_OBLIG_AMT")).thenReturn(100.0); // 模拟CC_FY_APPR_OBLIG_YTD_AMT的返回值(比如30.0) when(dsIn.getItemNumber(1, "CC_FY_APPR_OBLIG_YTD_AMT")).thenReturn(30.0);
3. 执行待测试的代码逻辑
假设这段逻辑封装在某个方法里,比如calculateUnobligAmt(String newValueIn),直接调用它:
String inputValue = "80.0"; // 设定输入的newValueIn yourTestObject.calculateUnobligAmt(inputValue); // 替换成你的实际测试对象和方法
4. 验证计算结果是否正确
用Mockito的verify方法检查setItemNumber是否传入了预期的计算值:
// 预期计算值:80.0 - 30.0 = 50.0 verify(dsIn).setItemNumber(1, "CC_FY_UNOBLIG_AMT", 50.0);
额外补充
如果dsIn是真实对象而非模拟对象,你可以在执行代码后直接调用dsIn.getItemNumber(1, "CC_FY_UNOBLIG_AMT")获取值,然后用断言验证:
Double result = dsIn.getItemNumber(1, "CC_FY_UNOBLIG_AMT"); assertEquals(50.0, result);
给你一个完整的测试方法示例:
@Test void testNonNullBranchUnobligAmtCalculation() { // 初始化模拟对象 YourDsClass dsIn = mock(YourDsClass.class); YourTestClass testObj = new YourTestClass(dsIn); // 注入模拟对象 // 模拟前置条件 when(dsIn.getItemNumber(1, "CC_FY_APPR_OBLIG_AMT")).thenReturn(150.0); when(dsIn.getItemNumber(1, "CC_FY_APPR_OBLIG_YTD_AMT")).thenReturn(40.0); // 执行测试逻辑 String inputValue = "100.0"; testObj.calculateUnobligAmt(inputValue); // 验证结果 verify(dsIn).setItemNumber(1, "CC_FY_UNOBLIG_AMT", 60.0); // 100-40=60 }
这样就能完全验证非null分支的逻辑是否正确执行啦!
内容的提问来源于stack exchange,提问作者TacoB0t
相关产品推荐
相关产品推荐

