一、测试分类
- 黑盒测试:不需要写入代码,给输入值,看程序是否能够输出期望的值。
- 白盒测试:需要写代码。关注程序的具体执行过程。像
Junit
就是白盒测试的一种。
黑盒测试比较简单,一般现在市面上很多的测试,都是黑盒测试。
当然,如果选择做测试之类的工作的话,我还是希望做白盒测试了。多写代码,对身体有益,奥利给!
二、Junit使用:白盒测试
背景
如果想要测试一下计算器的运算结果对不对,以往,我会这样写,先定义一个Calculator
类:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24
|
public class Calculator {
public int add(int a,int b) { return a+b; }
public int sub(int a,int b) { return a-b; } }
|
再定义一个测试类:
1 2 3 4 5 6 7 8 9 10 11 12 13
| public class CalculatorTest { public static void main(String[] args) { Calculator c=new Calculator();
int result=c.sub(1, 2); System.out.println(result); } }
|
看上面代码就知道了,我测试完了加法,又想测试减法,只能重新再写一次,很麻烦。
所以我们可以通过Junit
进行单元测试,免除这些复杂的步骤。
使用Junit
步骤:
- 定义一个测试类(测试用例)
测试类名:被测试的类名Test,如CalculatorTest
包名:xxx.xxx.xxx.test,如top.meethigher.test
- 定义测试方法:可以独立运行
方法名:test测试的方法名,如testAdd()
返回值:void
参数列表:空参 - 给方法加注解
@Test
- 导入
Junit
的依赖环境
Junit 5跟Junit 4的比较
判定结果:
- 红色代表失败
- 绿色代表成功
- 一般我们使用
断言
操作来处理结果,Assert.assertEquals(expected,actuals)
补充:
@BeforeEach:修饰的方法,会在测试方法执行之前执行
@AfterEach:修饰的方法,会在测试方法执行之后执行
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42
| public class CalculatorTest {
@BeforeEach public void init() { System.out.println("init..."); }
@AfterEach public void close() { System.out.println("close..."); }
@Test public void testAdd() { Calculator c=new Calculator(); int result=c.add(1, 2);
Assert.assertEquals(3, result); System.out.println("加法测试"); }
@Test public void testSub() { Calculator c=new Calculator(); int result=c.sub(2, 2); Assert.assertEquals(0, result); System.out.println("减法测试"); } }
|
上面该例子是Junit5的使用例子,下面放上一个Junit4使用例子,其实没太大区别
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57
| public class MybatisTest05 { private InputStream is; private SqlSession sqlSession; private PersonDao personDao; @Before public void init() { try { is = Resources.getResourceAsStream("SqlMapConfig.xml"); } catch (IOException e) { e.printStackTrace(); } SqlSessionFactory factory = new SqlSessionFactoryBuilder().build(is); sqlSession = factory.openSession(); personDao = sqlSession.getMapper(PersonDao.class); } @After public void destroy() throws IOException { if (sqlSession != null) sqlSession.close(); if (is != null) is.close(); }
@Test public void testFindAll() throws IOException { List<Person> persons = personDao.findAll(); for (Person p : persons) { System.out.println(p); } }
@Test public void testSave() throws IOException { Person person = new Person(); person.setName("肖战"); person.setGender("男"); person.setAge(38); person.setGrade(1); person.setSchool("腾讯"); person.setPosition("日本"); personDao.savePerson(person); sqlSession.commit(); } }
|