如何在JUnit中测试最高值获取逻辑,能否使用assertEquals断言
getHighestValue单元测试断言说明
完全可以使用assertEquals完成getHighestValue()逻辑的断言,当前你编写的初始测试代码存在多处需要修正的问题,否则无法正常执行测试:
- JUnit的
@Test注解需要标注在测试方法上,当前将其放在成员变量声明前的写法不符合语法规范,会导致测试方法无法被识别执行。 getHighestValue()依赖firstStuff、secondStuff、thirdStuff三个外部对象的getValue()返回值,直接实例化Value类时这三个成员默认是null,运行时会抛出空指针异常。需要给Value类补充带三个依赖参数的构造方法完成注入,或是通过Mockito这类Mock框架模拟三个依赖的返回值,才能可控构造测试输入。assertEquals的传参规则是:第一个参数为预期的最高值,第二个参数为实际调用getHighestValue()得到的返回值,两个都是int基本类型,直接传值即可完成比较。
修正后的测试代码参考
public class TestGetHighestValue { private Value theValue; private Stuff firstStuff; private Stuff secondStuff; private Stuff thirdStuff; @Before public void setup() { // 初始化Mock依赖并注入Value实例 firstStuff = mock(Stuff.class); secondStuff = mock(Stuff.class); thirdStuff = mock(Stuff.class); theValue = new Value(firstStuff, secondStuff, thirdStuff); } @Test public void testGetHighestValue() { // 构造测试场景:三个返回值分别为1、5、3,预期最高值为5 when(firstStuff.getValue()).thenReturn(1); when(secondStuff.getValue()).thenReturn(5); when(thirdStuff.getValue()).thenReturn(3); // 执行断言 assertEquals(5, theValue.getHighestValue()); } }
建议覆盖的测试场景
- 最高值出现在三个参数的任意位置
- 三个返回值完全相等的情况
- 包含负数、0的边界数值场景
内容的提问来源于stack exchange,提问作者wkddls
相关产品推荐
相关产品推荐

