码迷,mamicode.com
首页 > 其他好文 > 详细

使用JUnit进行单元测试

时间:2015-11-01 19:26:53      阅读:426      评论:0      收藏:0      [点我收藏+]

标签:

本教程使用JUnit4.x介绍单元测试,包含创建JUnit测试,也涉及用Eclipse IDE的进行测试。

软件测试的目的

软件测试执行的软件以验证状态和行为。
软件单元测试帮助开发人员验证小段程序的逻辑是正确的。
自动化回归测试可以提高代码覆盖率,节省大量人力。

测试术语

 

单元测试执行指定代码中的功能并验证其行为或状态。

被测代码的百分比叫做覆盖率。

单元测试针对一小段代码(类,方法),又叫本地测试,应该被移除外部依赖,例如用测试框架的测试实现或者mock对象替换外部依赖。

单元测试并不适合复杂的UI或组件交互,这是集成测试的工作。

 

集成测试测试组件的行为或组件之间的集成。

性能测试使用基准测试反复测试软件组件。确保测试的代码运行速度够快(甚至高负载下)

 

 

行为测试(也叫交互测试)不验证的方法调用的结果,但检查方法是否用正确的输入参数调用。
状态测试验证的结果

算法或者系统功能以状态测试为主

 

测试组织

通常单元测试是在单独的工程或源文件夹,和真正的代码独立。

测试内容是一个非常有争议的话题。一些开发人员认为代码中的每条语句都需要进行测试。在任何情况下都应该测试应用程序的关键和复杂的部分。引入新的功能,扎实的测试套件可以快速进行回归测试。

可以忽略一些简单的代码,例如getter和setter方法??,它是简单地赋值。编写这些测试非常耗时,而且毫无意义的,因为你在测试Java虚拟机。 JVM本身已经有测试,开发最终用户的应用程序可以认为字段赋值在Java中能工作。

如果接手的工程中没有测试代码,最好为过去经常发生错误的部分写测试,这样就能集中精力去做关键部分。

Java中常见的测试框架有Junit和TestNG。

使用Junit

JUnit的4.x版使用注解来指定测试。主页参见http://junit.org/和https://github.com/junit-team/junit。

JUnit测试是类中用于测试的方法。使用注解@org.junit.Test。方法中使用的断言方法(JUnit或其他断言框架提供),检查代码的执行的实际结果与预期。

下面的代码演示JUnit测试。该测试假定MyClass类存在,并且有multiply(int, init)方法。

import static org.junit.Assert.assertEquals;

import org.junit.Test;

public class MyTests {

  @Test
  public void multiplicationOfZeroIntegersShouldReturnZero() {

    // MyClass is tested
    MyClass tester = new MyClass();

    // assert statements
    assertEquals("10 x 0 must be 0", 0, tester.multiply(10, 0));
    assertEquals("0 x 10 must be 0", 0, tester.multiply(0, 10));
    assertEquals("0 x 0 must be 0", 0, tester.multiply(0, 0));
  }

} 

在广泛使用的Junit命名方法是类名称下测试和“测试”加Test后缀。should常用于测试方法名,如ordersShouldBeCreatedmenuShouldGetActive,以增强可读性。Maven通过surfire插件自动生成Tests后缀的测试类。

多个测试类可以组合成test suite。运行test suite将在该suite按照指定的顺序执行所有测试类。下面演示包含两个测试类 (MyClassTest和MySecondClassTest)
的测试集,通过@Suite.SuiteClasses statement可以增加测试类

package com.vogella.junit.first;

import org.junit.runner.RunWith;
import org.junit.runners.Suite;
import org.junit.runners.Suite.SuiteClasses;

@RunWith(Suite.class)
@SuiteClasses({ MyClassTest.class, MySecondClassTest.class })
public class AllTests {

} 

 

test suite中也可以包含test suite。

 

通过标准的Java代码可以在Eclipse之外运行JUnit测试。Apache Maven的或Gradle框架之类的构建框架通常与持续集成服务器(如Hudson或Jenkins)组合定期自动执行测试。

org.junit.runner.JUnitCore类的runClasses()方法允许运行测试类,返回为org.junit.runner.Result对象,包含测试结果信息。

下面类演示如何运行MyClassTest。这个类将执行测试类,输出潜在错误到控制台

package de.vogella.junit.first;

import org.junit.runner.JUnitCore;
import org.junit.runner.Result;
import org.junit.runner.notification.Failure;

public class MyTestRunner {
  public static void main(String[] args) {
    Result result = JUnitCore.runClasses(MyClassTest.class);
    for (Failure failure : result.getFailures()) {
      System.out.println(failure.toString());
    }
  }
} 

以上类可以像Java类一样从命令行运行,你只需要添加JUnit Jar到classpath即可。

基本的JUnit测试代码构建

 

参考资料

Unit Testing with JUnit - Tutorial

http://azyet.github.io/2015/05/19/junitNote1/

使用JUnit进行单元测试

标签:

原文地址:http://www.cnblogs.com/pythontesting/p/4926670.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!