首页 > 代码库 > -单元测试框架-Junit

-单元测试框架-Junit

1.Junit注解

Junit3和junit4的区别 。 测试:白盒、黑盒测试,黑盒:很多时候都是黑盒,站在用户角度去使用功能,面向需求的方式,只要测功能怎么使用。

白盒测试:经过代码的方式来测试,测试逻辑、耗时、功能、等,拆开源码来测试,对里面的功能一个一个测试,一般由开发人员来测试。

Junit测试在企业中一般用的少,比较麻烦写测试用例,小型、中型项目一般【学Java,到凯哥学堂kaige123.com】黑盒测试、不测性能,只测试功能、使用。但是大型项目就一定要进行白盒测试,全方面测试,性能这些都要测试,耗时之类的都要测试。每个逻辑块都要测试性能,比如300ms之内要完成的,如果超过了,就不标准了。

严格的项目要写测试用例,每个功能都要写个测试用例去测试一下。

我们写逻辑代码来测试一下:junit测试可以分为很多条线路测试,一个方法就是一条线路,每条线路基本上是不会相关联的。比如你的前面的一条测试线路出错了,并不会影响到下一条线路的正常进行。

image

image

image

如上图所示,有两条线路,两个方法,线路1有异常不会影响线路2大的运行。

image

这是没有出错,就不会抛异常。

Junit里面有一个之前调用和之后调用@Before和@After,这就是之前调用和之后调用。怎么使用这两个东西?

之前调用可以用来提前创建需要测试的类的对象、打开相应的资源之类的,而之后调用可以用来销毁已经测试了的类的资源等。

image

如上图所示的代码,就是使用之前调用和之后调用。 要注意,不同的线路、方法不要互相调用,不要让它们产生互相关联,比如你的方法1里面调用方法2,万一测试的时候,其中一个方法出错了,就会影响另一个方法的调用了。

如果我们有两个测试类去测试一个逻辑类,我们可以两个测试类一起调用运行吗?

可以,要用到组合注解才可以让两个类一起运行:

image

上图是第二个测试类的代码,我们怎么把两个测试类组合合并起来一起运行呢?

首先,我们先创建一个类,然后使用合并注解@Runwith(Suite.class)@SuiteClasses({TestService.class,TestService2.class}),代码:

image

如上图,我们的两个测试类都被调用了。可以一次性把很多个测试类运行起来的组合测试。

另外,上面都是用来测试正确情况的,我们也要测一下出错的情况,@Test(expected=UserNameException)@Test(expected=PassWordException):

image

如上图,我们的两个方法,在给了错误用户名和错误密码后,成功的把对应的异常抛出来了,所以这连个测试用例应该是正确的。

expected是专门用来测试异常发生的,如果账户密码不对,要发生了才没有问题。

image

如上图所示,就是超时了,所以会报错,有些程序对程序的运行时间也是有要求的,如果你的程序没有在规定的时间内运行完成,说明程序是成功的 。 多方面都要考虑考虑,正确性、异常等、运行时间这些都应该测试一下。

Assert,无论junit3还是junit4都是有这个东西的。主要是用来判断逻辑值的。如方法:Assert.assertTrue(逻辑表达式),如果里面的表达式是true,则用junit test的时候是通过的,如果表达式是false,则会抛出异常,如:

image

image

结果如图,注意这里是failure而不是error,这就是逻辑错误了。也有Assert.assertFalse(逻辑表达式),这里是用来判断逻辑是不是false的,如果是false则junit test通过,如果是true则是failure了,如:

image

image

还有出错时可以写一句话的情况,如下:

image

image

还有比较数组是不是一样的逻辑比较,如下:

image

image

其中,这里的数组类型可以更换为其他类型的,同样是这种比较方法。

还有不相等比较:

image

还有判断不能为空的:

image

还有比较两个对象的内存地址的:

image

image

还有专门用来抛错误的fail(),如下:

image

以后我们验证代码的逻辑的时候,我们可以直接使用Assert类里面提供的各种各样的静态方法,就不用自己去写判断逻辑是否正确的代码了。

Junit3的里面的Assert也可以使用的,只要把测试类继承一下TestCase类就行了。

image

image

Hamcrest,这个jar包,也是一个框架,专门用来做逻辑匹配,非常灵活的。

可以联合多个条件一起判断,而assert只能判断一个条件。具体的使用方法,需要联合assertThat(actual,matcher)来进行使用。

image

image

image

image

还有一个allof必须全部都满足,就是括号里面的条件都满足才可以,如:

image

image

image

只要里面的endsWith不通过,那整个判断的结果就是错的,就会有failure

image

还有一个anyOf就是只要条件中只要有一个满足就能通过,只有两个都不满足时才会不通过:

image

image

-单元测试框架-Junit