首个单元测试

   单元测试是程序员编写的一段代码,用于执行另外一段代码的行为是否和预期的一致。

  环境配置

     使用的maven导入所需要的包,笔者使用的Junit4、Junit5、PowerMock、Mockito包

<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-module-junit4</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-api-mockito</artifactId>
<version>1.7.4</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.powermock</groupId>
<artifactId>powermock-core</artifactId>
<version>2.0.9</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.junit.jupiter</groupId>
<artifactId>junit-jupiter</artifactId>
<version>RELEASE</version>
<scope>test</scope>
</dependency>

被测试的类
public class Largest {
public static int largest(int [ ] list){
int index = 0;
int max = 0;
for (index = 0; index < list.length-1; index++) {
if (list[index] > max) {
max = list[index];
}
}
return max;
}
}

测试类

该类是从循环中取出最大值,对于给定的一个list,显然元素的位置对该方法的结果不会产生影响,马上就会想到如下的测试:
[7,8,9]
[8,7,9]
[9,7,8]
如果list中有两个相等,会出现什么情况呢
[7,9,8,9]
如果list中只有一个元素呢
[1] - > 1
如果list中含有负数呢
[-9,-8,-7]
单元测试代码如下:
import org.junit.jupiter.api.Test;

import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.*;

public class LargestTest {

@Test
void largest() {
assertEquals(9,Largest.largest(new int[]{7,8,9}));
assertEquals(9,Largest.largest(new int[]{9,8,7}));
assertEquals(9,Largest.largest(new int[]{7,9,8}));
assertEquals(1,Largest.largest(new int[]{1}));
assertEquals(-7,Largest.largest(new int[]{-7,-8,-9}));
}
}

运行该测试类报错
 首个单元测试

 实际结果与我们期望的结果不相等,发现是list.length-1写错了,应该是list.length。

修改完代码后继续运行:

首个单元测试

 

这个时候期望的是-7,但实际得到的结果是0,通过检查代码发现最大值写的有问题,应该是最小值,马上更改为Integer.MIN_VALUE,在运行

首个单元测试

 

 终于运行成功了,好开心。

再想想还有没有设计上需要改动,如果我们传递的是一个空数组给程序时,是不是需要检查是否会抛出一个异常。

修改被测试的代码如下:

public class Largest {

public static int largest(int [ ] list){
int index = 0;
int max = Integer.MIN_VALUE;
if(list.length == 0){
throw new RuntimeException("Empty list");
}
for (index = 0; index < list.length; index++) {
if (list[index] > max) {
max = list[index];
}
}
return max;
}
}

添加测试代码:

import org.junit.jupiter.api.Test;
import static org.junit.Assert.assertEquals;
import static org.junit.jupiter.api.Assertions.*;

public class LargestTest {

@Test
void largest() {
Throwable exception = assertThrows(RuntimeException.class,() -> {
Largest.largest(new int[]{});
});
assertEquals("Empty list",exception.getMessage());
assertEquals(9,Largest.largest(new int[]{7,8,9}));
assertEquals(9,Largest.largest(new int[]{9,8,7}));
assertEquals(9,Largest.largest(new int[]{7,9,8}));
assertEquals(1,Largest.largest(new int[]{1}));
assertEquals(-7,Largest.largest(new int[]{-7,-8,-9}));
}
}
在继续运行我们的单元测试:

首个单元测试

 

 单元测试类运行成功

 


 

           

   

    

 

上一篇:strust参数传递优先级,ognl


下一篇:Struts2【三】 StrutsPrepareAndExecuteFilter 源码分析<一>