`

java Junit

    博客分类:
  • Java
 
阅读更多

 

 

什么是单元测试

写了个类,要给别人用,会不会有bug?怎么办?测试一下。

main方法测试好不好?不好!

1.         不能一起运行!

2.         大多数情况下需要人为的观察输出确定是否正确

为什么要进行单元测试

重用测试,应付将来的实现的变化。

提高士气,明确知道我的东西是没问题的。

JUnit4 HelloWorld

1.         new project

2.         建立类

3.         建立testcase

放弃旧的断言,使用hamcrest断言

1.         assertThat

2.         使用hamcrest的匹配方法

a)         更自然

3.         示例

a)         assertThat( n, allOf( greaterThan(1), lessThan(15) ) );
assertThat( n, anyOf( greaterThan(16), lessThan(8) ) );
assertThat( n, anything() );
assertThat( str, is( "bjsxt" ) );
assertThat( str, not( "bjxxt" ) );

b)        assertThat( str, containsString( "bjsxt" ) );
assertThat( str, endsWith("bjsxt" ) ); 
assertThat( str, startsWith( "bjsxt" ) ); 
assertThat( n, equalTo( nExpected ) ); 
assertThat( str, equalToIgnoringCase( "bjsxt" ) ); 
assertThat( str, equalToIgnoringWhiteSpace( "bjsxt" ) );

c)         assertThat( d, closeTo( 3.0, 0.3 ) );
assertThat( d, greaterThan(3.0) );
assertThat( d, lessThan (10.0) );
assertThat( d, greaterThanOrEqualTo (5.0) );
assertThat( d, lessThanOrEqualTo (16.0) );

d)        assertThat( map, hasEntry( "bjsxt", "bjsxt" ) );
assertThat( iterable, hasItem ( "bjsxt" ) );
assertThat( map, hasKey ( "bjsxt" ) );
assertThat( map, hasValue ( "bjsxt" ) );

FailureError

1.         Failure是指测试失败

2.         Error是指测试程序本身出错

JUnit4 Annotation

1.         @Test: 测试方法

a)         (expected=XXException.class)

b)        (timeout=xxx)

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

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

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

5.         @BeforeClass: 所有测试开始之前运行(对应的方法必须是static)

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

运行多个测试

注意

1.         遵守约定,比如:

a)         类放在test包中

b)        类名用XXXTest结尾

c)         方法用testMethod命名

其他框架

TestNG

 

 

 

使用Junit4

一、简介
    Junit 4是Junit框架有史以来的最大改进,其主要目标便是利用Java 5的Annotation特性简化测试用例的编写。
    在Eclipse 3.2中已经自带了Junit 4.1(我使用的开发环境是Eclipse 3.3+Myeclipse 6.0),我们可以将Junit 4 Library添加到项目用到的Library中。也可以到Junit.org去下载Junit 4 Librar。要求:JDK 5.0或以上版本。


二、使用
1、Junit 3中,Junit依赖反射来执行每个以test开头的方法,但是Junit 4中,有了Annotation的,我们的测试方法就不需要再以testXXX来标识了,而是写上一个@Test标注即可。如:
@Test public static void m1() {}

2、测试类也不必继承自TestCase了。我们可能会想到,不继承TestCase,我们就无法使用断言,即无法调用assertXxx()方法了。所以,在Junit 4中,所有的断言的方法全部都以静态方法的形式放入到了Assert类中,使用Assert.assertXxx()来调用,如果使用import static静态导入Assert,那么与Junit 3中使用断言是一样的。

3、Junit 3中,setUp()和tearDown()方法分别是准备测试环境和释放资源,在Junit 4中,这二个方法依赖于@Before和@After标记,好处是如果我们忘记了在这二个方法中调用父类的同名方法,Junit框架会自动处理使用@Before和@After标记的方法。

4、不再强迫必须使用setUp()和tearDown()作为方法名,可以使用更有意义的方法名。如:init()和close(),前提是它们被标注了@Before和@After标记


三、实例开发
我们还使用讲解Junit 3时使用的Calculate类

package junit;

public class Calculate {
public int add(int a, int b) {
   return a + b;
}

public int minus(int a,int b)
{
   return a - b;
}
}

 

Junit 4测试类


public class CalculateTest {
private Calculate cal ;

public CalculateTest()
{
   System.out.println("创建了CalculateTest类的实例");
}

@Before
public void init() throws Exception {
   cal = new Calculate();
   System.out.println("测试方法前调用@Befored");
}

@After
public void close() throws Exception {
   System.out.println("测试方法后调用@After");
}

@Test
public void doAdd() {
   assertEquals(cal.add(1, 2), 3);
}

@Test
public void testMinus() {
   assertEquals(cal.minus(2, 1), 1);
}
}


四、测试异常:
对测试异常,JUnit 4可以用expected=Exception.class来期待一个预期的异常,而不必手动编写。如:测试以下方法,


public int div(int a,int b)
{
   return a / b;
}


可能会抛出除数为0的异常,我们可以这样来编写:


@Test(expected=ArithmeticException.class)
public void testDiv() {
   cal.div(5, 0);
}


五、设置最长执行时间
对于非常耗时的测试,@Test还有一个timeout来标识该方法最长执行时间,超过此时间即表示该方法测试失败:1为毫秒数


@Test(timeout=1)
public void testMinus() {
   assertEquals(cal.minus(2, 1), 1);
}


六、@BeforeClass和@AfterClass
    这是Junit 4与Junit 3相比较另一个较大的区别。它们在一个Test类的所有测试方法执行前后各执行一次。这是为了初始化一些重要的资源,比如数据库连接,会在@BeforeClass中来执行初始化,然后再执行测试方法,最后在@AfterClass中释放资源。
    由于这二个方法在运行其间仅执行一次,因此它们只能标记为静态方法,其实在所有的测试方法中共享的资源也必须是静态引用。如:


@BeforeClass
public static void setUpBeforeClass() throws Exception {
     System.out.println("call @BeforeClass and init database connection");
     dbConnection = new Object();
}

@AfterClass
public static void tearDownAfterClass() throws Exception {
     System.out.println("call @AfterClass to release database connection");
     dbConnection = null;
}


注意:
Java 5.0中的自动Box/UnBox特性,在调用assertEquals()时要注意:如果我们这样写:
assertEquals(100f,100);
按照自动装箱会变成:
assertEquals(new Float(100f),new Integer(100));
这样会引起测试失败,因为它们类型不一样。
因此我们对float和double的测试,应试使用:
assertEquals(float, float, float delta);
assertEquals(double, double, double delta);
还有一点,Junit 4不能与以前的版本兼容。


分享到:
评论

相关推荐

    java junit包,可以直接下载使用

    Java JUnit 包是用于Java编程中的一个单元测试框架,它极大地简化了对代码功能的验证和调试。JUnit是开源的,由Eclipse基金会维护,是开发者进行单元测试的首选工具。这个压缩包包含了不同版本的JUnit库,包括文档、...

    Java junit

    这是本人在公司培训时做的一个PPT文档,介绍了junit3以及junit4,还有他们的区别使用

    解决java junit单元测试@Test报错的问题

    Java JUnit 单元测试是Java开发者进行代码质量把控的重要工具,它允许程序员对代码的各个模块进行独立验证,确保每个部分都能正常工作。然而,在实际使用过程中,开发者可能会遇到@Test注解报错的情况,这可能会影响...

    Java Junit单元测试实例详解

    Java Junit 单元测试实例详解 Java Junit 单元测试是软件测试中的一种重要方法,旨在确保软件的质量和可靠性。本篇文章将为大家详细讲解 Java Junit 单元测试的相关知识点内容。 一、测试分类 在软件测试中,测试...

    java junit-4.12

    JUnit是一个Java语言的单元测试框架。JUnit是一个开放源代码的Java测试框架,用于编写和运行可重复的测试。他是用于单元测试框架体系xUnit的一个实例(用于java语言)。 1、用于测试期望结果的断言(Assertion) 2、...

    Java单元测试之JUnit

    在这个"Java单元测试之JUnit"的代码实践中,我们将深入探讨JUnit的基本使用方法以及它在Java项目中的应用。 首先,JUnit是一个开源的、基于Java的测试框架,它允许开发者编写可执行的测试用例来检查代码的功能。...

    Selenium Simplified 全本 pdf 非扫描版 IDE Java JUnit

    Selenium Simplified是一本专门介绍如何使用Java和JUnit框架结合Selenium自动化测试工具进行软件测试的教程。本书由Alan Richardson编写,由Compendium Developments出版,并首次于2010年在大不列颠出版。本书不仅...

    Junit单元测试内部机制解析

    JUnit作为Java领域中最流行的单元测试框架之一,提供了强大的测试能力,帮助开发者编写高质量的代码。 #### 二、JUnit框架的内部工作机制 JUnit的核心设计理念是将测试逻辑与业务逻辑分离,通过一系列标准化的API...

    junit-4.9.zip,java测试包junit-4.9的jar包免费下载

    《深入理解JUnit 4.9:Java测试框架的基石》 JUnit是Java编程语言中最流行的单元测试框架之一,尤其在Spring框架的开发中扮演着至关重要的角色。标题中的"junit-4.9.zip"是一个包含JUnit 4.9版本的压缩包,提供了一...

    junit4 jar包 Java单元测试框架绿色免费版.zip

    JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了一种方便、高效的方式来验证代码的正确性。这个“junit4 jar包 Java单元测试框架绿色免费版.zip”文件包含的是JUnit4框架的可执行jar包,用于...

    junit4测试jar包

    JUnit4测试框架是Java开发中广泛使用的单元测试工具,它为开发者提供了编写和运行可重复、可靠的测试用例的能力。这个“junit4测试jar包”包含了一切你需要在项目中集成JUnit4进行测试的库文件。只需将其复制到你的...

    junit-4.11-API文档-中文版.zip

    标签:junit、jar包、java、中文文档; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请放心使用。

    Junit5.jar包,代码测试工具

    JUnit5是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了强大的测试能力,确保代码的质量和稳定性。本篇文章将详细介绍JUnit5的核心组件、主要功能以及如何在项目中使用。 JUnit5由三个主要模块组成...

    Junit5 jar包

    Junit5的jar包,可用来测试Lambda表达式等。

    Java单元测试之JUnit篇

    Java单元测试之JUnit篇 Java单元测试是编写测试代码,应该准确、快速地保证程序基本模块的正确性。好的单元测试的标准是JUnit,它是Java单元测试框架,已经在Eclipse中默认安装。 JUnit4是JUnit的最新版本,通过...

    JUnit——Java测试框架

    JUnit,作为Java编程语言的事实上的标准测试框架,其在软件开发中的重要性不容忽视。由著名程序员Kent Beck和Erich Gamma发起,JUnit以其简洁而强大的功能,极大地推动了Java开发中的自动化测试实践。Martin Fowler...

    junit-jupiter-params-5.7.2-API文档-中文版.zip

    标签:junit、jupiter、params、中文文档、jar包、java; 使用方法:解压翻译后的API文档,用浏览器打开“index.html”文件,即可纵览文档内容。 人性化翻译,文档中的代码和结构保持不变,注释和说明精准翻译,请...

    Java编程使用Junit实现接口单元测试,快速实现接口全覆盖(建议收藏)

    资源对应https://onefire.blog.csdn.net/article/details/120736588博客,这个是一个完整的基于SpringBoot架构的Java项目,使用idea或者eclipse打开就可以使用。对零基础或小白,以及测试工程师,有很大的参考价值。

    Junit4教程非常详尽

    JUnit4 是 JUnit 框架有史以来的最大改进,其主要目标便是利用 Java5 的 Annotation 特性简化测试用例的编写。下面是对 JUnit4 的详细介绍: 一、Annotation 简介 Annotation 是 Java5 中引入的一种元数据特性,...

    刚发布的最新版 Junit 4.0

    Junit 4.0 是Java开发领域中一个重要的里程碑,它是JUnit系列的第四个主要版本,专注于提升测试的灵活性和可扩展性。JUnit是Java语言中最广泛使用的单元测试框架,它使得开发者能够编写易于理解、运行快速且可靠的...

Global site tag (gtag.js) - Google Analytics