`

还没有用JUnit作为单元测试工具测试过,今天就来学习一下

阅读更多
1、    说实话,写了这么多程序了,还从来没有用JUnit作为单元测试工具测试过,心理面感到真的是惭愧。原来的所有测试,我都是通过在控制台打印输出语句看结果,这样就可以根据自己打印的信息自己去判断,如果是少量的打印语句,还好办,但是如果是多数,那就不好办了,有些时候在测试好后,发布的程序中一般都不包括打印语句,这样就会把测试好的程序的打印测试语句去掉。所谓,人无完全,程序也没有绝对不出错的,只是看条件而已,而以后如果再次出错的时候,自己又会一行行的去读代码,找逻辑,再去写打印语句,然后再删除掉,这样,个人感觉,小项目里面还可以使用,这种多半就是一两个人做,就算改起来也会好办。但是如果是大项目,那么就惨了,开发人员换了一批又一批,每个人都不知道对方做了些什么,还有些什么没有做,慢慢的去读代码,或者是还不如自己去写,这样就浪费时间。因为也做个几个项目,所以对这个也算有了一定的了解,既然要想做一个优秀的JAVA程序员,那么JNuit现在应该是一个比较好的测试工具。

下面是JUnit一些特性的总结:
1)         提供的API可以让你写出测试结果明确的可重用单元测试用例
2)       提供了三种方式来显示你的测试结果,而且还可以扩展
3)       提供了单元测试用例成批运行的功能
4)       超轻量级而且使用简单,没有商业性的欺骗和无用的向导
5)       整个框架设计良好,易扩展

2、    我现在用的是JNUIT4,我把ASSERT包中的一些比较难于理解的方法,写在这里:
assertTrue

public static void assertTrue(java.lang.String message,
                              boolean condition)

    断言conditon为真,如果不是就抛出指定的异常错误message

    Parameters:
        message - 指定的或者是为空的断言错误
        condition - 检测的条件

assertFalse

public static void assertFalse(java.lang.String message,
                               boolean condition)

    断言conditon为假,如果不是就抛出指定的异常错误message

    

    Parameters:
        message - 指定的或者是为空的断言错误
        condition - 检测的条件

fail

public static void fail(java.lang.String message)

    用指定的信息去使一个测试失败

    Parameters:
        message - 指定的或者是为空的断言错误
    See Also:
        AssertionError

assertEquals

public static void assertEquals(java.lang.String message,
                                java.lang.Object expected,
                                java.lang.Object actual)

    断言两个对象相对,如果不等,就用指定的信息抛出一个断言错误。如果expected或者是actual为空,他们认为是相等的。
    

    Parameters:
        message - 指定的或者是为空的断言错误
        expected - 期待的值
        actual - 实值的值

assertEquals

public static void assertEquals(java.lang.String message,
                                double expected,
                                double actual,
                                double delta)

    用一个正误差,去断言两个双精度数或者是单精度数相对。如果不等,用指定的message抛出异常。如果expeted的值无穷大,那么些是精度就会被忽略。NaNs被认为相等:assertEquals(Double.NaN, Double.NaN, *)通过。

    

    Parameters:
        message - 指定的或者是为空的断言错误
        expected - 期待的值
        actual - 根据期待的值的实际值
        delta - 在精度之内的期待值与实际值,被认为是相等的

下面两个方法没有搞懂
assertThat

public static <T> void assertThat(T actual,
                                  org.hamcrest.Matcher<T> matcher)

assertThat

public static <T> void assertThat(java.lang.String reason,
                                  T actual,
                                  org.hamcrest.Matcher<T> matcher)


3、 //Assert包里面所有的方法
package junit.framework;
public class Assert
{
 //
 // Constructors
 //
 protected Assert() { }
 //
 // Methods
 //
 public static void assertTrue(java.lang.String p1, boolean p2) { }
 public static void assertTrue(boolean p1) { }

 public static void assertFalse(java.lang.String p1, boolean p2) { }
 public static void assertFalse(boolean p1) { }

 public static void fail(java.lang.String p1) { }
 public static void fail() { }

 public static void assertEquals(java.lang.String p1, java.lang.Object p2, java.lang.Object p3) { }
 public static void assertEquals(java.lang.Object p1, java.lang.Object p2) { }
 public static void assertEquals(java.lang.String p1, java.lang.String p2, java.lang.String p3) { }
 public static void assertEquals(java.lang.String p1, java.lang.String p2) { }
 public static void assertEquals(java.lang.String p1, double p2, double p3, double p4) { }
 public static void assertEquals(double p1, double p2, double p3) { }
 public static void assertEquals(java.lang.String p1, float p2, float p3, float p4) { }
 public static void assertEquals(float p1, float p2, float p3) { }
 public static void assertEquals(java.lang.String p1, long p2, long p3) { }
 public static void assertEquals(long p1, long p2) { }
 public static void assertEquals(java.lang.String p1, boolean p2, boolean p3) { }
 public static void assertEquals(boolean p1, boolean p2) { }
 public static void assertEquals(java.lang.String p1, byte p2, byte p3) { }
 public static void assertEquals(byte p1, byte p2) { }
 public static void assertEquals(java.lang.String p1, char p2, char p3) { }
 public static void assertEquals(char p1, char p2) { }
 public static void assertEquals(java.lang.String p1, short p2, short p3) { }
 public static void assertEquals(short p1, short p2) { }
 public static void assertEquals(java.lang.String p1, int p2, int p3) { }
 public static void assertEquals(int p1, int p2) { }

 public static void assertNotNull(java.lang.Object p1) { }
 public static void assertNotNull(java.lang.String p1, java.lang.Object p2) { }
 public static void assertNull(java.lang.Object p1) { }
 public static void assertNull(java.lang.String p1, java.lang.Object p2) { }

 public static void assertSame(java.lang.String p1, java.lang.Object p2, java.lang.Object p3) { }
 public static void assertSame(java.lang.Object p1, java.lang.Object p2) { }
 public static void assertNotSame(java.lang.String p1, java.lang.Object p2, java.lang.Object p3) { }
 public static void assertNotSame(java.lang.Object p1, java.lang.Object p2) { }

 public static void failSame(java.lang.String p1) { }

 public static void failNotSame(java.lang.String p1, java.lang.Object p2, java.lang.Object p3) { }

 public static void failNotEquals(java.lang.String p1, java.lang.Object p2, java.lang.Object p3) { }

 public static java.lang.String format(java.lang.String p1, java.lang.Object p2, java.lang.Object p3) { }
}

可以看得出来,还是assertEquals () 用得最多了,这个也可能用得最常用的了。

4、下面是一个简单的示例:

被测试类:Calculator
package junit.classes;
public class Calculator {
    public Calculator() {
    }
    public int add(int augend, int addend) {
        return augend + addend;
    }
    public int subtration(int minuend, int subtrahend) {
        return minuend - subtrahend;
    }
}

非正规的测试类:TestCalculator
package junit.test;
import junit.classes.Calculator;
import junit.framework.TestCase;
import org.junit.Test;
public class TestCalculator extends TestCase {
    Calculator calculator = new Calculator();
   
    //用Test注释表示要测试的的单元
    @Test
    public void testAdd() {
        int result = calculator.add(20, 50);
        assertEquals(result, 70);
    }

    @Test
    public void testSubtration() {
        int result = calculator.subtration(50, 20);
        //这里不对,要抛出一个异常
        assertEquals("测试与结果不符",result, 20);
    }
    public static void main(String[] arg) {
        TestCalculator ts=new TestCalculator();
        ts.testAdd();
        ts.testSubtration();
    }
}

正规的测试方式:TestCalculator
package junit.test;
import junit.classes.Calculator;
import junit.framework.Test;
import junit.framework.TestCase;
import junit.framework.TestSuite;
import junit.textui.TestRunner;
public class TestCalculator extends TestCase {
    Calculator calculator = new Calculator();
    public void testAdd() {
        int result = calculator.add(20, 50);
        assertEquals(result, 70);
    }
    public void testSubtration() {
        int result = calculator.subtration(50, 20);
        //这里不对,要抛出一个异常
        assertEquals("测试与结果不符",result, 20);
    }
    //这个静态方法就是要获得测试的是那个类,必须为静态的
    public static Test suite() {
        //返回测试单元
        //这里的测试单元就是当前类,当前类里面的所有函数
        return new TestSuite(TestCalculator.class);
    }
    public static void main(String[] arg) {
        //运行测试,任何JAVA程序要运行,都必须得有主函数
        TestRunner.run(suite());
    }   
}
分享到:
评论

相关推荐

    JUnit单元测试原则 单元测试工具

    ### JUnit单元测试原则与工具详解 #### 一、单元测试概述 单元测试(Unit Testing)是一种软件测试方法,主要用于验证程序中的最小可测试单元(通常是单个函数或方法)是否按预期工作。对于Java这样的面向对象语言来...

    单元测试之道(Java):使用JUnit进行单元测试

    单元测试之道(Java):使用JUnit进行单元测试。单元测试是提高代码质量的有效手段,但大部分开发人员由于种种原因都不乐意进行单元测试。

    Junit4单元测试源码

    多数Java的开发环境都已经集成了JUnit作为单元测试的工具。 [1] JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为...

    junit单元测试junit单元测试junit单元测试

    总结来说,JUnit是Java开发中的关键工具,它简化了单元测试的编写和执行,帮助开发者发现和修复代码中的问题,从而提高软件质量。在进行单元测试时,应遵循最佳实践,确保测试的独立性、可读性和全面性,这样才能...

    Junit单元测试Junit单元测试Junit单元测试Junit单元测试

    Junit提供了一个统一的测试框架,允许开发者使用Annotations来定义测试用例,实现自动化的单元测试。 Junit单元测试的优势包括: 1. 提高测试效率:Junit提供了一个自动化的测试框架,允许开发者快速编写和运行...

    单元测试工具Junit的简单使用

    通过本文的学习,我们不仅了解了 JUnit 的基本概念和作用,还掌握了如何在 Eclipse 中使用 JUnit 进行简单的单元测试。掌握单元测试对于提高软件质量至关重要,而 JUnit 作为 Java 开发者常用的单元测试框架,其强大...

    在Eclipse中使用JUnit4进行单元测试

    在Eclipse中使用JUnit4进行单元测试是一种常见的Java开发实践,它可以帮助开发者确保代码的正确性和稳定性。单元测试是软件开发中的重要环节,通过编写针对代码各个独立模块的测试用例,可以验证代码功能是否按预期...

    使用JUnit进行单元测试PPT

    【使用JUnit进行单元测试】 单元测试是软件开发过程中的重要环节,它主要目的是验证程序的各个独立组件(如方法或类)是否按照预期工作。JUnit是Java编程语言中最常用的单元测试框架,它允许开发者创建和运行针对...

    JUnit和单元测试入门简介

    JUnit 单元测试入门简介 JUnit 是一个开源的 Java 测试框架,用于编写和运行可重复的测试。它主要用于白盒测试、回归测试。单元测试是最小粒度的测试...同时,JUnit 也提供了许多特征和工具来帮助开发者进行单元测试。

    Junit 单元测试完整案例

    Junit作为Java领域最常用的单元测试框架,为开发者提供了简单易用的API来进行测试。本案例涵盖了Spring和Struts两大框架的单元测试,旨在帮助开发者掌握如何对这两个流行的Java Web框架进行有效的测试。 一、Junit...

    Junit单元测试文档

    junit3 junit4 api,单元测试的利器

    junit4单元测试

    JUnit4是Java编程语言中最广泛使用的单元测试框架之一,它为开发者提供了一种方便、高效的方式来验证代码的正确性。这个压缩包文件包含了JUnit4的相关库,使得开发人员能够轻松地在他们的项目中引入单元测试功能。...

    实验02.基本路径测试法和单元测试工具JUnit的使用.pdf

    在本实验中,我们将学习如何使用基本路径测试法来设计和执行测试用例,并如何使用JUnit单元测试工具来帮助我们编写和执行测试用例。本实验将有助于学生掌握基本路径测试方法和JUnit单元测试工具的使用方法,并提高...

    Junit单元测试的实验报告.docx

    简单介绍了Junit的安装过程与实例应用。应用的问题是软件测试中的佣兵问题,整个文档中有代码及测试结果,可以更好地帮助学生了解Junit单元测试中的作用。

    用Junit进行单元测试junit4.5

    JUnit 4.5作为Java单元测试的重要工具,通过注解、参数化测试等特性极大地简化了测试编写,提高了测试效率。理解并熟练运用这些特性,对于保证代码质量,减少缺陷,提升软件的可靠性具有至关重要的作用。在实际项目...

    Junit单元测试Junit单元测试Junit单元测试

    ### JUnit单元测试详解 #### 一、引言 随着软件工程的发展,单元测试的重要性日益...在未来,随着技术的不断进步,单元测试的重要性还将进一步提升,掌握JUnit等单元测试框架的使用将是每一个程序员必备的技能之一。

    Junit4单元测试必备入门教程

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

Global site tag (gtag.js) - Google Analytics