您的位置:软件测试 > 开源软件测试 > 开源单元测试工具 > junit
JUnit简单使用教程
作者:网络转载 发布时间:[ 2016/6/12 14:46:09 ] 推荐标签:单元测试 Junit 软件测试工具

  JUnit简介
  JUnit是由 Erich Gamma和Kent Beck编写的一个回归测试框架(regression testing framework)。JUnit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。
  简单编写单元测试实例
  public class JunitAnnotation {
  // execute before class
  @BeforeClass
  public static void beforeClass() {
  System.out.println("in before class");
  }
  // execute after class
  @AfterClass
  public static void afterClass() {
  System.out.println("in after class");
  }
  // execute before test
  @Before
  public void before() {
  System.out.println("in before");
  }
  // execute after test
  @After
  public void after() {
  System.out.println("in after");
  }
  // test case
  @Test
  public void test() {
  System.out.println("in test");
  }
  // test case ignore and will not execute
  @Ignore(“unimplemented”)
  public void ignoreTest() {
  System.out.println("in ignore test");
  }
  }
  JUnit常用注解介绍
  @Test:JUnit 3.x是通过对测试方法的命名(test+方法名)来确定是否是测试,且所有的测试类必须继承TestCase。JUnit 4.x只需要在方法前加上@Test 可以定义一个测试方法。
  注意:测试方法必须是public void,即公共、无返回值的;可以抛出异常。
  @Ignore :该注解标记的测试方法在测试中会被忽略。当测试的方法还没有实现,或者测试的方法已经过时,或者在某种条件下才能测试该方法(比如需要一个数据库连接,而在本地测试的时候,数据库并没有连接),那么使用该注解来标记这个方法。同时可以为该注解传递一个String的参数,表明为什么会忽略这个测试方法。比如:@lgnore(“该方法还没有实现”),在执行的时候,仅会报告该方法没有实现,而不会运行测试方法。
  @BeforeClass:当我们运行几个有关联的用例时,可能会在数据准备或其它前期准备中执行一些相同的命令,这个时候为了让代码更清晰,更少冗余,可以将公用的部分提取出来, 放在一个方法里,并为这个方法注解@BeforeClass。意思是在测试类里所有用例运行之前,运行一次这个方法。例如创建数据库连接、读取文件等。
  注意:方法名可以任意,但必须是public static void,即公开的、静态的、无返回值的。这个方法只会运行一次。
  @AfterClass:跟@BeforeClass对应,在测试类里所有用例运行之后,运行一次。用于处理一些测试后续工作,例如清理数据,恢复现场。
  注意:同样必须是public static void,即公开的、静态的、无返回值的。这个方法只会运行一次。
  @Before:使用了该注解的方法在每个测试方法执行之前都要执行一次。主要用于一些独立于用例之间的准备工作。比如两个用例都需要读取数据库里的用户A信息,但第一个用例会删除这个用户A,而第二个用例需要修改用户A。那么可以用@BeforeClass创建数据库连接。用@Before来插入一条用户A信息。
  注意:必须是public void,不能为static。
  @After :使用了该注解的方法在每个测试方法执行之后要执行一次。
  @Runwith:即测试运行器,放在测试类名之前,用来确定测试类怎么运行的,当不指定这个注解时,使用默认Runner来运行测试代码,即@RunWith(JUnit4.class)。
  常见的运行器有:
  (1)@RunWith(Parameterized.class):参数化运行器,配合@Parameters使用JUnit的参数化功能。
  (2)@RunWith(Suite.class)
  @SuiteClasses({ATest.class,BTest.class,CTest.class})
  测试集运行器配合使用测试集功能。   
  (3)@RunWith(JUnit4.class):JUnit 4的默认运行器
  (4)@RunWith(JUnit38ClassRunner.class):用于兼容junit3.8的运行器
  (5)一些其它运行器具备更多功能。例如@RunWith(SpringJUnit4ClassRunner.class)集成了Spring的一些功能。
  @Parameters:用于JUnit的参数化功能,用来标记准备数据的方法。
  注意:该方法需要满足一定的要求:
  (1)该方法必须为public static的
  (2)该方法返回值必须为java.util.Collection类型
  (3)该方法的名字不做要求
  (4)该方法没有参数
  参数化测试
  为了保证单元测试的严谨性,我们模拟了不同的测试数据来测试方法的处理能力,为此我们编写了大量的单元测试方法。而这些测试方法大同小异:代码结构都是相同的,不同的仅仅是测试数据和期望值。为了降低代码的冗余,JUnit 4提供了参数化测试,即只写一个测试方法,把这若干种情况作为参数传递进去,一次性的完成测试。
  JUnit 4参数化测试的五个步骤:
  (1)为准备使用参数化测试的测试类指定特殊的运行器org.junit.runners.Parameterized。
  (2)为测试类声明几个变量,分别用于存放期望值和测试所用数据。
  (3)为测试类声明一个带有参数的公共构造函数,并在其中为第二个环节中声明的几个变量赋值。
  (4)为测试类声明一个使用注解 org.junit.runners.Parameterized.Parameters饰的,返回值为java.util.Collection的公共静态方法,并在此方法中初始化所有需要测试的参数对。
  (5)编写测试方法,使用定义的变量作为参数进行测试。

上一页12下一页
软件测试工具 | 联系我们 | 投诉建议 | 诚聘英才 | 申请使用列表 | 网站地图
沪ICP备07036474 2003-2017 版权所有 上海泽众软件科技有限公司 Shanghai ZeZhong Software Co.,Ltd