欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

JavaEE——Junit

程序员文章站 2022-03-01 15:49:56
...

声明:本栏目所使用的素材都是凯哥学堂VIP学员所写,学员有权匿名,对文章有最终解释权;凯哥学堂旨在促进VIP学员互相学习的基础上公开笔记。

Junit

Junit又名单元测试,Junit是用来测试Java代码的,使用Junit测试有什么特别的地方吗?Junit的好处之一,落实在单元两字上。可以对单元进行全方位测试。

什么是单元?单元就是模块。

单元小一点可以指一个类,一个类完成一件事件。

单元在小一点,可以指一个类中的方法。一个方法完成一个功能,多个方法组成一个类。

我们要对这一个个单元,一个个模块进行全方位测试,我们就可以使用Junit。Junit提供了这样的功能:分块全方位测试。

例:

JavaEE——Junit
            
    
    博客分类: java

这里有一个方法,给年龄赋值。先判断年龄是否符合要求,如果不符合,则抛出异常。如果符合则赋值给年龄。

JavaEE——Junit
            
    
    博客分类: java

使用Junit对前面写的年龄方法进行测试

@Test注解,告诉别人我这是一个测试用例,待会给我运行这个测试用例

因为一个方法写在类中,又不是main方法,光一个方法是不会被运行的。写上@Test表示这个Junit测试用例。注解配置描述着:这是一个测试用例,待会会来调用此注解下的方法

在第一个测试用例中,我们setAge传入年龄10,这是正常的年龄是不会有错误的。

在第二个测试用例中,我们@Test(expected)表示这个用例会抛出如下错误,如果有抛出我指定的错误,表示测试是通过。如果没有抛错或是抛错但不是我的这个错误,表示测试不通过

在这里就进行了2种测试。一个是正常情况下是否正确,一个是测试参数非法下是否会抛出异常。抛出指定的才通过,否则不通过。

运行结果如下:

JavaEE——Junit
            
    
    博客分类: java

运行了2个测试用例,都执行成功

如果我将测试抛出异常的方法改为10,年龄正常下,就不抛异常,再看测试用例:

改为10:

JavaEE——Junit
            
    
    博客分类: java

JavaEE——Junit
            
    
    博客分类: java

出现了警告,表示这个用例指定的异常没有被抛出。需要抛出异常,才表示正常通过。因为这个用例就是用来测试异常是否被抛出的。

JavaEE——Junit
            
    
    博客分类: java

当点击类上的运行,是这个测试类下的所有用例全部运行起来,如之前

JavaEE——Junit
            
    
    博客分类: java

当点击某一个用例的运行,表示只单独运行这一个用例如左下角

这就是全方面测试体现之一:可以对某一个方法,单独拎出来测试。可以对某一个方法,测试他正常运行,还测试他非法访问。不仅测正确,还要测错误。

如果没有用Junit,我们就只能是写一个类,main方法调用进行测试。这样有点不合适,并且测起来也麻烦,使用Junit就可以避免这种问题

在@Test注解,有2个参数可以选填

JavaEE——Junit
            
    
    博客分类: java

一个是expected,一个是timeout。一个设置方法会抛出异常,一个设置方法执行时间。

查看这个expected,是Class<? extends Trowable>,要求Class并且继承要异常,可以测异常 Timeout是设置这个方法执行的时间,当超过这个时间,表示这个方法超时了,可以做优化

Junit还提供了什么呢?

我们这里有一个MyArrayList类,我们打算测试这个类:

JavaEE——Junit
            
    
    博客分类: java

这里有这样一个注解@BeforeClass

JavaEE——Junit
            
    
    博客分类: java

@BeforeClass这个注解的意思是,在运行整个Junit之前,先调用这个方法。等同于初始化 还有这个注解@AfterClass,在运行完毕整个Junit后,调用这个注解下的方法,等同于destroy 还有@Before每次调用Junit案例前,先执行我这个方法 还有@After每次调用完Junit案例后,先执行我这个方法

这里的区别是: @BeforeClass与@AfterClass是在运行Junit框架前后调用,只会调用一次 @Before与@After是在调用用例前后调用,有多少个用例调用多少次

我们什么静态的集合属性,我们这里使用@BeforeClass注解,在执行整个Junit用例开始前,先给集合注入数据,在后面的测试就可以使用集合,就不用填充数据了。

@BeforeClass需要是静态的方法,因为在整个执行前先调用,可能是拿类.方法调用。保证方法先被执行。

测试一:

JavaEE——Junit
            
    
    博客分类: java

进入Junit调用@BeforeClass注入数据。我们这里addMyArrayList测试: 第0个数据是否是嘻嘻哈哈,第1个数据是否是哈哈嘻嘻,第2个数据是否是哈哈哈哈

Assert Junit提供的操作类,翻译:断言。这个操作类有什么用处呢?它的方法替代我们的一些操作。比如这里判断前后和后面的对象是否一样。就是解决这种事情的。如果符合则表示通过,如果不符合就报错。断言,断论是否OK

Assert提供的方法都是静态的方法:

JavaEE——Junit
            
    
    博客分类: java

引入静态包,*将Assert下的静态方法全部引入。

静态引包好处是,之前调用:Assert.assertEquals()。现在调用:assertEquals()

判断删除:

JavaEE——Junit
            
    
    博客分类: java

删除第二个,则就删掉了最后一个哈哈哈哈。assertNull判断第二个是否为null

在添加一个进入,第二个不为null。assertNotNull判断第二个是否不为null

assertEquals判断第一个对象与第二个对象是否一致

删除第一个,那么就由0 1 2变成0 2。那么2为1,则就是哈哈哈哈为1,哈哈嘻嘻被删除。assertEquals判断第二个是否是哈哈哈哈

判断下标越界:

JavaEE——Junit
            
    
    博客分类: java

测试参数错误,是否为抛出越界错误

判断修改

JavaEE——Junit
            
    
    博客分类: java

判断修改的地方是否是我们预期的值

这就是Junit测试,对业务块全方位测试。

@Test提供多方面测试。提供的Assert断言减轻了我们以前测试麻烦。

@Ignore

要测试的用例:

JavaEE——Junit
            
    
    博客分类: java

JavaEE——Junit
            
    
    博客分类: java

对方法进行测试,按照往常,这样的一测试就报错,因为里面有抛错,Junit也没有指定逻辑会抛出错误

查看测试:

JavaEE——Junit
            
    
    博客分类: java

对于这个用例,上面划上了蜂窝的图标。也没有报错。为什么会这样呢? 这就是@Ignore的作用了,ignore翻译:忽略。这个注解的意思是:忽略这个用例不执行。所以没报错,因为根本没有执行这个用例,这就是@Ignore的作用,忽略测试用例

@Runwith

这个注解在Spring-TestContext对Spring测试时,会使用到这个注解。在使用Spring测试时有2个注解,一个是@Runwith一个是ContextConfiguration。

@ContextConfiguration的意思是指定application.xml Spring配置文件在哪里,那@Runwith是意思是?

这个注解的意思猜测是运行之前启动这个类。什么意思呢?启动@Runwith指定的类,这样Spring书写的test类就启动了,这样这个test类就会帮我们构建Spring环境。这样我们在test中就可以直接使用,无需手动创建applicationcontext类了。

看来这个@Runwith与@BeforClass的意思是差不多了,是的。不过@BeforClass是在运行测试前调用这个静态方法。而@Runwith是运行测试前运行这个类

查看注解里面的申请:

JavaEE——Junit
            
    
    博客分类: java

里面要求的是class,类的class管理。要求这个传递的class要继承与Runner类

我们继承这个类,查看要求,这个类是一个抽象类:

JavaEE——Junit
            
    
    博客分类: java

继承这个抽象类,需要实现2方法,一个是销毁,一个运行。当重写这两个方法后,在运行Junit前应该就是调用run,运行完毕后在调用销毁方法。

但当我们这样写后,报错了,也没有深究。但意思是这个意思,在运行Junit测试前,会调用这个run开始做初始化或是其他操作。