junit10 适用java8吗_廖雪峰Java8JUnit单元测试-1JUnit简介-1JUnit测试

测试驱动开发(Test Driver Development)

52e515fdd38b1a7c43a5c8bb0a703cc3.png

1.使用main()方法测试的缺点:

只能有1个main()方法,不能把测试代码分离

没有打印出测试结果和期望结果,例如expected:3628800,but actual:362880

因此,需要一种测试框架,帮助我们编写测试

public class Fact {

public static void main(String[] args) {

if(fact(10)==3628800){

System.out.println("pass");

}else {

System.out.println("fail");

}

}

public static long fact(long n){

long r = 1;

for(long i=1;i

r = r * i;

}

return r;

}

}

2.单元测试概念:

单元测试是针对最小的功能单元编写测试代码

Java程序最小的功能单元是方法

单元测试就是针对单个Java方法的测试

2.1单元测试的好处:

确保单个方法运行正常

如果修改了方法代码,只需确保其对应的单元测试通过

测试代码本身就可以作为示例代码

可以自动化运行所有测试并获得报告,报告包含成功和失败的用例,以及代码的覆盖率(一般要求70%以上)

2.2JUnit是一个开源的Java语言的单元测试框架

专门针对Java语言设计,使用最广泛

JUnit是事实上的标准单元测试框架

JUnit特点:

使用断言Assertion测试期望结果

可以方便地组织和运行测试

可以方便地查看测试结果

常用IDE(例如Eclipse)都继承了JUnit

可以方便的集成到Maven

JUnit的设计:

TestCase:一个Testcase表示一个测试

TestSuite:一个TestSuite包含一组TestCase,表示一组测试

TestFixture:一个TestFixture表示一个测试环境

TestResult:用于收集测试结果

TestRunner:用于运行测试

TestListener:用于监听测试过程,收集测试数据

Assert:用于断言测试结果是否正确

72500a59a37cfcd3e57a4f7bfbfa1006.png

使用Assert断言:import static org.junit.Assert.*

断言相等:assertEquals(100,x)

断言数组相等:assertArrayEquals({1,2,3},x)

断言浮点数相等:assertEquals(3.1415,x,0.0001) 最后为误差范围

断言为null:assertNull(x)

断言为true/false:assertTrue(x>0) assertFalse(x<0)

其他:assertNotEquals/assertNotNull

3.代码示例

带测试方法类Main.java

import java.util.Arrays;

public class Main {

public long fact(long n){

long r = 1;

for(long i=1;i<=n;i++){

r = r * i;

}

return r;

}

public int calculate(String expression){

String[] ss = expression.split("\\+");

System.out.println(expression+"=>"+ Arrays.toString(ss));

int sum=0;

for(String s:ss){

sum = sum + Integer.parseInt(s);

}

return sum;

}

}

3.1IDEA创建单元测试

3.1.1根目录下新建test目录,右键->Mark Direcotory as -> Test Sources Root

3.1.2打开待测试类Func.java,右键->Go to->Test->Create new Test,或者ctrl+shift+t

3.1.3勾选测试的方法即可,生成类名默认加上Test的后缀

8eb5b0b993818ff0331c155617efa9a7.png

3.2.Eclipse创建单元测试

3.2.1根目录右键new->Source Folder,创建test目录,希望将所有的单元测试都放在test目录下

3.2.2选择待测试类,new->Junit Test Case(如果没有,new-other-java-JUnit-Junit Test Case),选择New Junit4 test,Source Folder选择刚才创建的test目录->选择测试的方法->finsh,注意 Add Junit4 library to the build path,点击OK,创建完成

//MainTest.java

package com.testList;

import static org.junit.Assert.*;

import com.testList.Main;

public class MainTest {

@org.junit.Test

public void fact() {

assertEquals(6,new Main().fact(3));

assertEquals(24,new Main().fact(4));

assertEquals(720,new Main().fact(6));

}

@org.junit.Test

public void calculate() {

assertEquals(3,new Main().calculate("1+2"));

assertEquals(6,new Main().calculate("1+2+3"));

assertEquals(35,new Main().calculate("12+23"));

}

}

bef8d01774a679abbd7968cbb19aedb6.png

测试中发现的问题:如果传入的表达式中包含空格,如" 1 + 2"会提示java.lang.NumberFormatException,直接打印字符,发现字符包含空格,因此在转换为int时报错。修改代码,使用trim去除首尾的空格

```#java

public void calculateWithSpace(){

String expre = " 1 + 2";

String[] ss = expre.split("\\+");

// assertEquals(0,new Main().calculate(" 1 + 2"));

for(String s:ss){

System.out.println('a'+s+'a');//结果图1

//System.out.println('a'+s.trim()+'a');//结果图2

}

}

```

4615cec03d8b836ae283544fe019b505.png

d22eac173406a7c383ae4b63302d885c.png

修复之后,测试完成

```#java

//Main.java

public int calculate(String expression){

String[] ss = expression.split("\\+");

System.out.println(expression+"=>"+ Arrays.toString(ss));

int sum=0;

for(String s:ss){

sum = sum + Integer.parseInt(s.trim());

}

return sum;

}

//MainTest.java

@Test

public void calculateWithSpace(){

assertEquals(3,new Main().calculate(" 1 + 2"));

}

```

2c3bd13411df23cb2f3a48f5b0e1f65a.png

4.总结:

一个TestCase包含一组相关的测试方法

使用Assert断言测试结果(注意浮点数assertEquals要制定误差范围delta)

每个测试方法必须完全独立

测试代码必须非常简单

不能为测试代码再编写测试

测试需要覆盖各种输入条件,特别是边界条件

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值