ThinkChat2.0新版上线,更智能更精彩,支持会话、画图、阅读、搜索等,送10W Token,即刻开启你的AI之旅 广告
## JUnit特点 * 使用断言(Assertion)测试期望结果 * 可以方便的组织和运行测试 * 可以方便的查看测试结果 * 常用的开发工具IDEA, Eclipse都集成了JUnit * 可以方便的集成到maven项目中 ## maven依赖 ``` <dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.x</version> </dependency> ``` ## 项目中的目录结构 项目目录必须是如下,测试类规定标准是在test目录中进行测试 ``` ├── src │ ├── main │ │ └── java │ │ └── resources │ └── test │ │ └── java │ │ └── resources ``` ## 注解介绍 * @BeforeClass 全局只会执行一次,而且是第一个运行,用来初始化非常耗时的资源, 例如创建数据库 * @Before 在测试方法运行之前运行,初始化测试资源 * @Test 测试方法 * @Test(excepted=xx.class): xx.class表示异常类,表示测试的方法抛出此异常时,认为是正常的测试通过的 * @Test(timeout=毫秒数) :测试方法执行时间是否符合预期 * @After 在测试方法运行之后允许,释放测试资源 * @AfterClass 全局只会执行一次,而且是最后一个运行,清理@BeforeClass创建的资源, 例如创建数据库 * @Ignore 忽略此方法 * @RunWith:可以更改默认测试运行器org.junit.runner.Runner,JUnit使用Runner运行测试代码,在JUnit中有很多个 Runner,如果你没有指定,那么系统自动使用默认 Runner来运行你的代码。 ## 测试类方法的执行顺序 ``` BeforeClass() 测试类构造方法() Before() testA() After() Before() testB() After() AfterClass() ``` ## 断言介绍 断言的使用, 必须先引入必须的包,IDE创建的会自动引入 ``` import static org.junit.Assert.*; ``` assertEquals(100, x): 断言相等 assertArrayEquals({1, 2, 3}, x): 断言数组相等 assertNull(x): 断言为null assertTrue(x > 0): 断言为true assertFalse(x < 0): 断言为false; assertNotEquals: 断言不相等 assertNotNull: 断言不为null ## 参数化测试 * 可能会遇到这种测试,同样的逻辑方法,输入不同的参数,期望得到不同的结果,在以前需要写多个测试方法,JUnit4提供了参数化测试,需要在类上面指定如下的运行器:@RunWith (Parameterized.class) * 在提供数据的方法上加上一个@Parameters注解,这个方法必须是静态static的,并且返回一个集合Collection,该方法没有参数。 * 为测试类声明几个变量,分别用于存放期望值和测试所用数据。 * 为测试类声明一个带有参数的公共构造函数,并在其中为上个环节中声明的几个变量赋值。 ``` package org.test; import java.util.Arrays; import java.util.Collection; import org.junit.Assert; import org.junit.Test; import org.junit.runner.RunWith; import org.junit.runners.Parameterized; import org.junit.runners.Parameterized.Parameters; /** * 参数化测试的类必须有Parameterized测试运行器修饰 * */ @RunWith(Parameterized.class) public class AddTest { private int input1; private int input2; private int expected; /** * 准备数据,数据的准备需要在一个方法中进行,该方法需要满足一定的要求: 1)该方法必须由Parameters注解修饰 2)该方法必须为public static的 3)该方法必须返回Collection类型 4)该方法的名字不做要求 5)该方法没有参数 */ @Parameters @SuppressWarnings("unchecked") public static Collection prepareData(){ Object [][] object = {{-1,-2,-3},{0,2,2},{-1,1,0},{1,2,3}}; return Arrays.asList(object); } public AddTest(int input1,int input2,int expected){ this.input1 = input1; this.input2 = input2; this.expected = expected; } @Test public void testAdd(){ Add add = new Add(); int result = add.add(input1, input2); Assert.assertEquals(expected,result); } } ```