Java单元测试

来源:互联网 发布:淘宝设计师难做吗 编辑:程序博客网 时间:2024/05/02 22:37

一、概述

单元测试(Unit Testing, UI),是指对软件中的最小可测试单元进行检查和验证。对于单元测试中单元的含义,要根据实际情况去判定其具体含义,Java里的单元一般是指一个类。总的来说,单元就是人为规定的最小的被测功能模块。单元测试是在软件开发过程中要进行的最低级别的测试活动。

 

二、单元测试包括的具体测试点

2.1 接口功能测试

接口功能测试用来保证接口功能的正确性。接口功能测试范围主要包括:(1)新增接口的测试;(2)新增业务功能接口测试;(3)整个服务器的接口测试。

 

2.2 边界条件测试

边界值分析是一种黑盒测试方法,由长期的测试工作经验得知,大量的错误是发生在输入或输出的边界上,因此,针对边界进行测试是非常有必要的。

 

2.3 独立执行通路测试

独立执行通路测试的目标是保证每一条代码,每个分支都经过测试,这就引出了测试代码覆盖率的问题。

代码覆盖可分为以下四种情况:(1)语句覆盖:保证每一个语句都执行到了;(2)判定覆盖(分支覆盖):保证每一个分支都执行到;(3)条件覆盖:保证每一个条件都覆盖到true和false(即if、while中的条件语句)(4)路径覆盖:保证每一个路径都覆盖到。

Java代码覆盖率的相关分析软件:(1)Cobertura:语句覆盖;(2)Emma:Eclipse插件Eclemma。

 

三、JUnit

JUnit是Java单元测试框架,已经在Eclipse中默认安装。目前主流的有JUnit3和JUnit4。JUnit3中,测试用例需要继承TestCase类,而在JUnit4中,测试用例无需继承TestCase类,只需使用@Test等注解。JUnit3的package是junit.framework,而JUnit4是org.junit。

因为平时大部分时候用的都是JUnit4,所以这里重点介绍一下JUnit4。与JUnit3不同,JUnit4通过注解的方式来识别测试方法。目前支持的主要注解有:

@BeforeClass 全局只会执行一次,而且是第一个运行;

@Before 在测试方法运行之前运行;

@Test 测试方法;

@After 在测试方法运行之后允许;

@AfterClass 全局只会执行一次,而且是最后一个运行;

@Ignore 忽略此方法。

可以看到,执行次序是@BeforeClass -> @Before-> @Test -> @After -> @Before -> @Test -> @After ->@AfterClass。@Ignore注解的方法会被忽略。

 

四、Mock和Stub

Mock和Stub是Java测试代码中两种对外部依赖的处理方法。Mock侧重于对外部依赖功能的模拟,而Stub侧重于对功能的实现。例如,对于某外部依赖接口,Mock会直接对这个接口进行模拟,而Stub会新建一个实现了这个接口的类,并在其中填充数据实现外部依赖的功能。

一般情况下,优先选择Mock方式,因为在Mock方式下,模拟代码与测试代码放在一起,易读性好,而且扩展性、灵活性也比Stub好。比较流行的Mock有JMock、EasyMock、Mockito和PowerMock。

0 0
原创粉丝点击