测试概述
- 在我们编写代码的时候,开发了很多功能,我们需要对这些已经开发好的功能提前进行测试,检测功能方法是否有漏洞,是否有bug,这个时候我们可以适应Junit单元测试对我们开的代码进行测试。
- Junit是java语言的单元测试框架,属于第三方的一个工具,一般情况下我们需要导入响应的 jar包,对于目前集成开发工具自带的,例子(以idea开发工具)
- Junit属于白盒测试
测试分类
- 黑盒测试:大多数测试的细节隐藏起来,通常使用的是一些软件进行测试
- 白盒测试:大多数只需要写一些代码进行测试,我们能够看到一些测试的流程
Junit使用
- 步骤
1、测试类型:被测试的类的Test 如:UserTest、PeopleTest、CalcuatorTest…
2、测试类:应该放到测试资源包中
3、测试包: xxx.xxx.test如com.cm.test.user
定义测试方法:可以实现独立运行Junit4/Junit5- 建议:
- 方法名:test被测试的功能方法名 如:testGetName()、testAddNum()
- 返回值:void
- 参数列表:Junit4中---->空参 Junit5---->可以携带
- 修饰符:一般Junit4中使用public、Junit5中使用范围较广
4、给方法上添加注解@Test
- 结果判定
- 红色---->测试失败,中间可能出现了异常
- 橘黄色---->测试失败 实际的值和我们期望的值不一致
- 绿色---->测试成功
- 一般情况下,我们都是使用**断言(Assert)**操作处理结果的
示例代码:
如:Assert.asserEquals(期望的值,实际的值);
- Junit的其他测试相关的注解:
Junit4中 - @Test 把一个方法标记为测试方法
- @bufore 每一个测试方法执行前会自动调用一次该方法(搭配@Test一起使用)
- @After 每一个测试方法执行后会自动调用一次该方法(搭配@Test一起使用)
- @BeforeClass 所有的测试方法执行一次,在测试类还没有实例化已经被加载到啊,标记的方法为静态方法(搭配@Test一起使用)
- @Ignore 暂不执行该测试方法(待定的)(搭配@Test一起使用)
Junit5中 - @Test 把一个方法标记为测试方法
- @BeforeEach 每一个测试方法执行后会自动调用一次该方法(搭配@Test一起使用)
- @AfterEach 每一个测试方法执行后会自动调用一次该方法(搭配@Test一起使用)
- @BeforeAll 所有的测试方法执行前执行一次,测试类还没有进行实例化已经被加载到啊,标记的方法为静态方法(搭配@Test一起使用)
- @After 所有的测试方法执行后执行一次,在测试类还没有进行实例化已经被加载到啊,标记的方法为静态方法(搭配@Test一起使用)
- @Disabled 暂不执行该测试方法(待定的)(搭配@Test一起使用)
- …
Junit4demo例子如下:
- 建议:
public class CalculatorTest {
private final Calculator calculator = new Calculator();
/*- @Test 把一个方法标记为测试方法
- @bufore 每一个测试方法执行前会自动调用一次该方法(搭配@Test一起使用)
- @After每一个测试方法执行后会自动调用一次该方法(搭配@Test一起使用)
- @BeforeClass 所有的测试方法执行前执行一次,在测试类还没有进行实例化已经被加载到啊,标记的方法为静态方法(搭配@Test一起使用)
- @afterClass 所有的测试方法执行后执行一次,在测试类还没有进行实例化已经被加载到啊,标记的方法为静态方法(搭配@Test一起使用)
- @Ignore暂不执行该测试方法(待定的)(搭配@Test一起使用)*/
@BeforeClass
public static void testBeforeClass(){
//进行资源加载 资源初始化
System.out.println("TestBeforeClass被加载到。。只会执行一次!");
}
@Before
public void testBefore(){
System.out.println("TestBefore方法被加载.........");
}
@AfterClass
public static void testAfterClass(){
//进行资源的释放
System.out.println("TestAfterClass被加载到。。只会执行一次!");
}
@After
public void testAfter(){
System.out.println("TestAfter方法被加载到........");
}
//测试相加
@Test
public void testAddNum(){
int actual = calculator.addNum(10, 3);
//实用断言验证数据是否正确
Assert.assertEquals("期望值为13", 13, actual);
}
@Test
public void testSubtract(){
int actual = calculator.subtract(10, 3);
Assert.assertEquals("期望值为7", 7, actual);
}
//@Test
@Ignore//待定的测试功能
public void testDivide(){
System.out.println("TestDivide方法被加载到了........");
int actual = calculator.divide(10, 3);
Assert.assertEquals("断言结果值为3", 3, actual);
}
}
public class Calculator {
/**
* 向加
* @param x
* @param y
* @return
*/
public int addNum(int x,int y){
return x+y;
}
/**
* 测试相减
* @param x
* @param y
* @return
*/
public int subtract(int x,int y){
return x-y;
}
/**
* 测试相乘
* @param x
* @param y
* @return
*/
public int multiply(int x,int y){
return x*y;
}
/**
* 测试相除
* @param x
* @param y
* @return
*/
public int divide(int x,int y){
return x/y;
}
}
Junit5demo例子如下:
public class CalculatorTest {
private final Calculator calculator = new Calculator();
/*- @Test 把一个方法标记为测试方法
- @BeforeEach 每一个测试方法执行前会自动调用一次该方法(搭配@Test一起使用)
- @AfterEach 每一个测试方法执行后会自动调用一次该方法(搭配@Test一起使用)
- @BeforeAll 所有的测试方法执行前执行一次,在测试类还没有进行实例化已经被加载到啊,标记的方法为静态方法(搭配@Test一起使用)
- @AfterAll 所有的测试方法执行后执行一次,在测试类还没有进行实例化已经被加载到啊,标记的方法为静态方法(搭配@Test一起使用)
- @Disabled 暂不执行该测试方法(待定的)(搭配@Test一起使用)*/
//测试相加
@BeforeEach
public void testBeforeEach(){
System.out.println("testBeforeEach方法被加载到.......");
}
@AfterEach
public void testAfterEach(){
System.out.println("testAfterEach方法被加载到.......");
}
@BeforeAll
public static void testBeforeAll(){
System.out.println("testBeforeAll方法被加载到.......只会执行一次!");
}
@AfterAll
public static void testAfterAll(){
System.out.println("testAfterAll方法被加载到.......只会执行一次!");
}
@Test
public void testAddNum(){
int actual = calculator.addNum(10, 3);
//实用断言验证数据是否正确
Assert.assertEquals("期望值为13", 13, actual);
}
@Test
public void testSubtract(){
int actual = calculator.subtract(10, 3);
Assert.assertEquals("期望值为7", 7, actual);
}
//@Test
@Disabled//待定的测试功能
public void testDivide(){
System.out.println("TestDivide方法被加载到了........");
int actual = calculator.divide(10, 3);
Assert.assertEquals("断言结果值为3", 3, actual);
}
@RepeatedTest(10)//重复测试
void repeatedTest() {
System.out.println("hello world");
}
}