JUnit的使用

本文介绍了单元测试的概念,强调了测试覆盖率的重要性,并详细讲解了Java中JUnit的使用,包括@Test、@BeforeClass等注解以及各种断言方法。此外,还提到了TestNG和GoogleTest这两个流行的单元测试框架,以及Python中的pytest框架的特点和优势。
摘要由CSDN通过智能技术生成

单元测试工具

1.1 单元测试

单元测试是指测试代码中小的单元的测试。一个单元可以是一个函数、一个类、一个包或者一个子系统。

1.2 测试覆盖

指在测试中,被测试到的代码在程序中所占比例。

1.3 JAVA的单元测试工具

前成熟的单元测试框架包括:JUnit、TestNG、gtest、pytest、unittest

2 JUnit

Junit是一个开源测试框架,用于编写和运行可重复的自动化测试,因此我们可以确保我们的代码按预期工作。JUnit在工业中被广泛使用,可以作为独立Java程序(从命令行)使用,也可以在Eclipse等IDE中使用。数 Java 的开发环境都已经集成了 JUnit 作为单元测试的工具。

  • JUnit 使用断言进行测试,其中的断言机制将预期结果和程序运行结果相对比,保证结果预期可知性。
  • 用JUnit 进行测试要建立一个完全的测试对象
  • 必须使用@Test的注解

2.1 JUnit使用的简单例子

被测试的程序代码如下:

package com.javacodegeeks.junit;
public class Calculate {
    public int sum(int var1, int var2) {
    System.out.println("Adding values: " + var1 + " + " + var2);
    return var1 + var2;
    }
} 

建立单独的测试类;

package com.javacodegeeks.junit;
import static org.junit.Assert.*;
import org.junit.Test;
public class CalculateTest {
    Calculate calculation = new Calculate();
    int sum = calculation.sum(2, 5);
    int testSum = 7;
    
    @Test
    public void testSum() {
        System.out.println("@Test sum(): " + sum + " = " + testSum);
        assertEquals(sum, testSum);
      }
}

运行程序的结果输出

Adding values: 2 + 5
@Test sum(): 7 = 7

在这里插入图片描述

2.2 JUnit 注解

注解描述
@Test所注解方法的代码为测试用例,包含对源程序的测试代码
@BeforeClass所注解的方法是JUnit测试时首先被运行的方法且只能运行一次,通常用来进行预处理等操作
@Before所注解的方法在每个Test测试用例运行前运行,常用来进行初始化测试用例所需的资源
@After所注解的方法在每个Test测试用例运行后运行,常用于释放@Before注解方法打开的资源。(当@Before或@Test注解的方法发生异常时,@After所注解的方法仍会被运行)
@AfterClass所注解的方法是JUnit测试时最后一个被运行的方法且只能运行一次,通常用来释放相关使用资源
@Ignore所注解的方法在测试过程中不会运行。

2.3 JUnit断言 assertions

断言功能
assertEquals([String message], expected value, actual value)检查int, short, long, byte, char或Object等类型的值是否相等,第一个参数是一个可选的字符串消息。
assertEquals(double expected value, double actual value, double delta)检查指定误差范围内的double类型值是否相等,需要第三个参数delta表示可接受的误差范围。
assertNotEquals([String message], expected value, actual value)检查值是否不相等,第一个参数是一个可选的字符串消息。
assertArrayEquals([String message], expectedArray, resultArray)检查两数组内容是否相同
assertTrue(boolean condition)检查条件是否为真
assertFalse(boolean condition)检查条件是否为假
assertNull(Object object)检查对象是否为空
assertNotNull(Object object)检查对象是否不空
assertSame(Object expected, Object actual)检查两个变量是否引用同一
assertNotSame(Object expected, Object actual)检查两个变量是否不引用同一对象

简单实例:

package com.junit.main;

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

import org.junit.jupiter.api.AfterEach;
import org.junit.jupiter.api.BeforeEach;
import org.junit.jupiter.api.Test;

class MyTest {
	
	String t1="hello";
	String t2="world";
	int num1=1;
	int num2=2;
	int[] arr1=new int[] {1,2,3};
	int[] arr2=new int[] {1,2,3};
	double dnum1=1.0;
	double dnum2=1.9;
	Object ob1=null;
	Object ob2="hahaha";
	
	@BeforeEach
	void setUp() throws Exception {
	}

	@AfterEach
	void tearDown() throws Exception {
	}

	@Test
	void testAssertEquals() {
		//fail("Not yet implemented");
		assertEquals(num1, num1); //num1和num1相等
		assertNotEquals(num1, num2); //num1和num2不相等
		assertEquals(dnum1, dnum2, 1.0); //dnum1和dnum2的误差为0.9在范围在1.0之内
	}
	
	@Test
	void testAssertTrue() {
		assertTrue(num1!=num2);//num1!=num2为true
		assertFalse(num1==num2);//num1==num2为false
	}
	
	@Test
	void testAssertSame() {
		assertSame(t1, t1); //t1和t1引用同一对象
		assertNotSame(t1, t2); //t1和t2引用不同对象
	}
	
	@Test
	void testAssertArrayEquals() {
		assertArrayEquals(arr1, arr2); //arr1和arr2的数组内容相同
	}
	
	@Test
	void testAssertNull() {
		assertNull(ob1); //ob1为null
		assertNotNull(ob2); //ob2不空
	}

}

3 其他测试工具

3.1 TestNG

TestNG 是另一个为Java编程语言设计的开源单元测试框架,是一个受JUnit和NUnit启发而来的测试框架,但它引入了一些新功能,使其更强大、更容易使用,例如:

  • 核心特性是多线程测试执行,测试代码是否是多线程安全的;
  • 提供注释支持;
  • 支持数据驱动测试(使用@DataProvider);
  • 支持参数化测试;
  • 强大的执行模型(不再有TestSuite);
  • 支持各种工具和插件(Eclipse, IDEA, Maven等…);
  • 嵌入BeanShell以获得更多的灵活性;
  • 用于运行时和日志记录的默认JDK函数(没有依赖关系)。

3.2 GoogleTest

GoogleTest是一个跨平台的(Liunx、Mac OS X、Windows 、Cygwin 、Windows CE and Symbian ) C++单元测试框架,由google公司发布,为在不同平台上为编写C++测试而开发的。它提供了丰富的断言、致命和非致命判断、参数化、”死亡测试”等等。

3.3 pytest

pytest是一个非常成熟的全功能的支持Python语言的单元自动化测试框架。简单灵活,容易上手,支持参数化;能够支持简单的单元测试和复杂的功能测试,还可以用来做selenium/appnium等自动化测试,以及接口自动化测试(pytest集成requests)

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值