`
xgdellis
  • 浏览: 62466 次
  • 性别: Icon_minigender_1
  • 来自: 深圳
社区版块
存档分类

简单的Junit4应用

阅读更多

如果写了一个类,想测试一下有没有bug,可以用main方法去测试。但是main方法缺点很多,不是理想的做单元测试的途径——方法不能一起运行,且测试结果多数要通过程序员自己观察才可以判定。

    为了克服这些缺点,使单元测试更加简单方便,Junit是一个很好的选择。接下来,将会讲解下Junit4的使用。

    要使用Junit4非常的简单,准备工作也非常方便。以Junit4.8.1为例,只需要添加junit-4.8.1.jar就可以使用junit的所有传统方法。

 

以下是一个小例子:

待测试类T

package com.ellis.junit4;  
  
public class T {  
      
    public int add(int x, int y){  
        return x+y;  
    }  
      
}

 

 

junit4测试类TTest:

package com.ellis.junit4.test;  
  
import static org.junit.Assert.*;  
  
import org.junit.Test;  
  
import com.ellis.junit4.T;  
  
public class TTest {  
  
    @Test  
    public void testAdd() {  
        int z = new T().add(5, 3);  
                  assertEquals("z != 8", z, 8);   
         }  
  
}

 

TTest.class里的testAdd方法用来测试T.class里的add方法。@Test代表这个方法为测试方法。如果有多个方法用@Test注释的话,那么多个方法中的每个方法都可以单独运行(运行一个方法的时候,不运行其它方法),这是用main方法测试所无法比拟的。运行单个@Test方法的操作是:选中该方法名,然后点run。

    TTest.class里的assertEquals()就是Junit的断言方法之一,它的作用是判断z的值是否为8,如果z不等于8的话junit将会报错,"z !=8"是自己写的用于与该错误提示一起提示出来字符串,使错误原因更加直观。assert*()方法有很多,它们都是org.junit.Assert的静态方法,若要像TTest.class里那样使用,需要进行静态引入:import static org.junit.Assert.*。

    传统的,也就是Junit3及其之前的assert*()方法有很多,在这里就不一一介绍。这里主要介绍一下Junit4里新增加的hamcrest断言assertThat()。

    若要使用hamcrest的断言,还必须添加hamcrest-core-1.2.jar和hamcrest-library-1.2.jar这个两个jar包。

    assertThat()有什么作用?使用assertThat()有什么好处呢?assertThat()比起传统的assert*()断言,在功能上并没有多大的不同,它最主要的优点是在于——1.它的语法更接近于口语,从而使代码写和看起来更加直观;2.一个assertThat()可以实现绝大部分常用的传统assert*()方法的功能。下面以用assertThat()代替assertEquals()为例,讲解一下assertThat()。

 

用assertThat()的TTest:

package com.ellis.junit4.test;  
  
import static org.junit.Assert.*;  
import static org.hamcrest.Matchers.*;  
  
import org.junit.Test;  
  
import com.ellis.junit4.T;  
  
public class TTest {  
  
    @Test  
    public void testAdd() {  
        int z = new T().add(5, 3);  
        assertThat(z, is(8));  
        assertThat("wrong", z, allOf(greaterThan(5), lessThan(10)));  
  
        assertEquals("z != 8", z, 8);  
    }  
  
} 

 

如上面代码所示assertThat(z, is(8))的作用是判断z的值是否为8(z is 8 or not ?),它的作用和assertEquals(z, 8)完全一样。is()其实是org.hamcrest.Matchers的静态方法,若要如此使用必须先进行静态引入import static org.hamcrest.Matchers.*。

    上面代码中的assertThat(z, allof(greaterThan(5), lessThan(10)))的作用是判断z是否都allof()里面的条件,allof()里的条件是大于5(greaterThan(5))、小于3(lessThan(10))。

 

assertThat()常用的方法还有:

a)

assertThat( n, allOf( greaterThan(1), lessThan(15) ) ); n满足allof()里的所有条件
assertThat( n, anyOf( greaterThan(16), lessThan(8) ) );n满足anyOf()里的任意条件
assertThat( n, anything() );  n是任意值(任意值都可以通过测试)
assertThat( str, is( "ellis" ) ); str是is()里的内容
assertThat( str, not( "ellis" ) ); str不是not()里的内容

b)

assertThat( str, containsString( "ellis" ) ); str包含containsString()里的内容
assertThat( str, endsWith("ellis" ) );  str以endsWith()里的内容结尾
assertThat( str, startsWith( "ellis" ) ); str以startsWith()里的内容开始
assertThat( n, equalTo( nExpected ) ); n与equalTo()里的内容相等
assertThat( str, equalToIgnoringCase( "ellis" ) ); str忽略大小写后与equalToIgnoringCase()里的内容相等
assertThat( str, equalToIgnoringWhiteSpace( "ellis" ) );str忽略空格后与equalToIgnoringWhiteSpace()里的内容相等

c)

assertThat( d, closeTo( 3.0, 0.3 ) );d接近于3.0,误差不超过0.3
assertThat( d, greaterThan(3.0) );d大于3.0
assertThat( d, lessThan (10.0) );d小于10.0
assertThat( d, greaterThanOrEqualTo (5.0) );d大于或等于5.0
assertThat( d, lessThanOrEqualTo (16.0) );d小于或等于16.0

d)

assertThat( map, hasEntry( "ellis", "ellis" ) );map里有一个名为ellis的key,其值为ellis

assertThat( iterable, hasItem ( "ellis" ) );iterable(例如List)里包含值ellis
assertThat( map, hasKey ( "ellis" ) );map有一个名为ellis的key
assertThat( map, hasValue ( "ellis" ) );map里包含一个值ellis

 

另外,还有如下这些常用注解,使测试起来更加方便:

1.         @Ignore: 被忽略的测试方法

2.         @Before: 每一个测试方法之前运行

3.         @After: 每一个测试方法之后运行

4.         @BeforeClass: 所有测试开始之前运行

5.         @AfterClass: 所有测试结束之后运行

2
2
分享到:
评论

相关推荐

    junit4 jar完整包

    这个“junit4 jar完整包”包含了所有你需要进行单元测试的类和接口,使得测试过程变得简单且易于维护。下面我们将深入探讨JUnit4的核心概念、功能以及如何使用它。 首先,JUnit4是JUnit系列的一个重大升级,引入了...

    JUnit4JUnit4JUnit4(文档)

    JUnit4 的这些特性使得编写和维护测试变得更加简单和高效,同时也鼓励了TDD(测试驱动开发)和持续集成的实践。无论是在小型项目还是大型企业级应用中,JUnit4 都是Java开发者不可或缺的测试工具。通过深入理解和...

    Junit4简单实用

    每个测试方法执行之后都要执行一次。这两个元数据主要用于设置测试前后的环境,例如初始化数据或者清理资源。...在实际开发中,熟练掌握 JUnit4 的使用对于保证软件质量、提升开发效率具有重要意义。

    Junit4教程非常详尽

    在 JUnit4 中,测试用例的编写变得非常简单。我们可以使用 @Before、@After、@Test 等 Annotation 来描述测试方法,而不需要继承自 TestCase。这种方式使得测试用例的编写变得更加灵活和简洁。 三、JUnit4 中的元...

    JUnit4基础文档

    下面是一个简单的JUnit4 HelloWorld示例: 首先,创建一个测试类:HelloWorldTest.java ```java public class HelloWorldTest { @Test public void testHelloWorld() { // 测试代码 } } ``` 然后,使用JUnit4的...

    JUnit4使用简单教程

    eclipse上通过一个简单例子演示使用JUnit4进行测试

    junit4 单元测试源码

    【标题】"junit4 单元测试源码"涉及的是Java编程中单元测试的重要工具JUnit4的使用,这是对代码进行验证和调试的关键部分。JUnit4是JUnit框架的一个版本,它提供了更灵活的注解、测试套件管理和断言方式,使得编写...

    eclipse中使用junit4

    据您提供的信息,这篇教程将介绍如何在Eclipse中使用JUnit4进行单体测试。JUnit4是JUnit框架的一个重大改进,特别是在Java5引入注解功能之后。注解(Annotation)在Java中是一种元数据,用于提供额外的信息来描述类...

    Junit4 jar包

    Junit4作为Java开发中不可或缺的单元测试工具,通过其强大的注解机制和丰富的功能,使得测试编写变得简单高效。它不仅提高了代码质量,还降低了维护成本,促进了持续集成和敏捷开发。因此,掌握并熟练运用Junit4对于...

    Junit4单元测试入门例子

    总结,Junit4使得Java的单元测试变得简单而直观。通过注解,我们可以快速定义测试方法,结合断言库进行结果验证,确保代码质量。在本例中,我们学会了如何为Calculate类的加减乘除方法编写有效的单元测试,为后续的...

    JUnit4.rar(ppt讲义)

    JUnit 4 提供了一个简洁、易于使用的API,使得编写和运行测试变得简单高效。 **2. JUnit 4的新特性** 相比JUnit 3,JUnit 4引入了许多新特性,如注解(Annotations)、参数化测试、规则(Rules)等。注解简化了测试...

    Junit4教程

    使用JUnit4进行测试非常简单。首先,我们需要创建一个测试类,例如AddOperationTest。然后,我们可以使用@Test Annotation来描述测试方法。例如: ```java public class AddOperationTest { @Test public void add...

    junit3.8 和junit4 api

    JUnit 3.8是JUnit的一个早期版本,它的API设计相对简单,主要包含以下关键组件: 1. **测试类和测试方法**:在JUnit 3中,测试类通常继承自`junit.framework.TestCase`。测试方法以`test`开头,例如`public void ...

    单元测试JUnit4和DbUnit

    总的来说,单元测试是保证软件质量的关键环节,而JUnit4和DbUnit的结合使用,使得对数据库驱动的应用程序进行单元测试变得更加便捷和可靠。通过深入学习和实践,开发者能够更有效地找出代码中的问题,提高代码的稳定...

    Junit+log4j+slf4j

    将JUnit、log4j和SLF4J结合使用,开发者可以在开发过程中方便地进行单元测试,并通过SLF4J调用底层的日志框架(如log4j)记录测试和应用运行过程中的日志信息。这有助于调试、性能分析和问题定位,从而提高软件质量...

    Junit4单元测试必备入门教程

    JUnit4单元测试必备入门教程 JUnit4概述 -------- JUnit4是JUnit框架有史以来最大的改进,其主要目标是利用Java5的Annotation特性简化测试用例的编写。Annotation是一种元数据,用于描述数据。在Java中可以用来和...

Global site tag (gtag.js) - Google Analytics