JUnit test 如何做Java静态方法测试

JUnit test 如何做Java静态方法测试,第1张

使用junit测试Java静态私有方法,通过以下案例进行分析:

测试目标类如下:

package cnoutofmemoryjunit;

public class TestTarget {

    /

      移除正则表达式中需要转义的字符

      @param w word

      @return 移除正则表达式中需要转义的字符

      @author Administrator

      @date 2015-7-11

     /

    private static String convert4Regex(String w) {

        if (w == null) {

            return null;

        }

        String[] convertedChars = {"\\","","+","","(",")","{","}","[","]","","/","^","$","|"};

        for (String c : convertedChars) {

            w = wreplace(c, "\\" + c);

        }

        return w;

    }

}

测试方法:

@Test

public void testConvert4Regex() throws Exception {

        String input = "A+";

        String expected = "A\\+";

        Method targetMethod = TestTargetclassgetDeclaredMethod("convert4Regex", Stringclass);

        targetMethodsetAccessible(true);

        Object actual = targetMethodinvoke(TestTargetclass, new Object[]{input});

        assertEquals(expected,actual);

    }

JUnit是一个开发源代码的Java测试框架 用于编写和运行可重复的测试 他是用于单元测试框架体系xUnit的一个实例(用于java语言) 它包括以下特性 用于测试期望结果的断言(Assertion) 用于共享共同测试数据的测试工具 用于方便的组织和运行测试的测试套件 图形和文本的测试运行器

JUnit最初是由Erich Gamma(GoF之一)和Kent Beck(xp和refactor的先驱之一)编写的 需要说明的是JUnit一般是用来进行单元测试的 因此需要了解被测试代码的内部结构(即所谓的白盒测试) 另外junit是在xp编程和重构(refactor)中被极力推荐使用的工具 因为在实现自动单元测试的情况下可以大大的提高开发的效率 但是实际上编写测试代码也是需要耗费很多的时间和精力的 那么使用这个东东好处到底在哪里呢?笔者认为是这样的 对于xp编程而言 要求在编写代码之前先写测试 这样可以强制你在写代码之前好好的思考代码(方法)的功能和逻辑 否则编写的代码很不稳定 那么你需要同时维护测试代码和实际代码 这个工作量就会大大增加 因此在xp编程中 基本过程是这样的 构思-》编写测试代码-》编写代码-》测试 而且编写测试和编写代码都是增量式的 写一点测一点 在编写以后的代码中如果发现问题可以较块的追踪到问题的原因 减小回归错误的纠错难度 对于重构而言 其好处和xp编程中是类似的 因为重构也是要求改一点测一点 减少回归错误造成的时间消耗 对于非以上两种情况 我们在开发的时候使用junit写一些适当的测试也是有必要的 因为一般我们也是需要编写测试的代码的 可能原来不是使用的junit 如果使用junit 而且针对接口(方法)编写测试代码会减少以后的维护工作 例如以后对方法内部的修改(这个就是相当于重构的工作了) 另外就是因为junit有断言功能 如果测试结果不通过会告诉我们那个测试不通过 为什么 而如果是想以前的一般做法是写一些测试代码看其输出结果 然后再由自己来判断结果使用正确 使用junit的好处就是这个结果是否正确的判断是它来完成的 我们只需要看看它告诉我们结果是否正确就可以了 在一般情况下会大大提高效率

安装JUnit

安装很简单 先到以下地址下载一个最新的zip包 //download sourcefe net/junit/下载完以后解压缩到你喜欢的目录下 假设是JUNIT_HOME 然后将JUNIT_HOME下的junit jar包加到你的系统的CLASSPATH环境变量中 对于IDE环境 对于需要用到的junit的项目增加到lib中 其设置不同的IDE有不同的设置 这里不多讲 如何使用JUnit写测试?

最简单的范例如下

创建一个TestCase的子类package junitfaq; import java util ;import junit framework ; public class SimpleTest extends TestCase { public SimpleTest(String name) {super(name);} 

lishixinzhi/Article/program/Java/ky/201311/29247

分类: 电脑/网络 >> 互联网

问题描述:

能用平实易于理解的语言详细的说一下么?

谢谢

解析:

JUnit是由 Erich Gamma 和 Kent Beck 编写的一个回归测试框架(regression testing framework)。Junit测试是程序员测试,即所谓白盒测试,因为程序员知道被测试的软件如何(How)完成功能和完成什么样(What)的功能。Junit是一套框架,继承TestCase类,就可以用Junit进行自动测试了。

首先我们需要先下载相应的 JUnit 相关的 JAR 包,下载的过程可以去 JUnit 的官方网站,也可以直接通过 Maven 资源仓库来完成。

使用简单的 @Test 注解实现我们的测试方法的编写和执行

准备工作做好之后,接下来我们就可以开始尝试编写壹个简单的测试代码了。首先,我们编写了壹个 Calculator 类,并提供五个方法分别完成加减乘除以及求平方的运算。代码如下:

package netoschinabairrfhoinnmain;

public class Calculator {

public void add(int n){

result += n;

}

public void substract(int n){

result -= n;

}

public void multiply(int n){

result = n;

}

public void divide(int n){

result /= n;

}

public void square(int n){

result = n n;

}

public int getReuslt(){

return result;

}

public void clear(){

result = 0;

}

private static int result;

}

在测试类中用到了JUnit4框架,自然要把相应地Package包含进来。最主要地一个Package就是orgjunit。把它包含进来之后,绝大部分功能就有了。还有一句话也非常地重要“import static orgjunitAssert;”,我们在测试的时候使用的壹系列assertEquals()方法就来自这个包。大家注意壹下,这是壹个静态包含(static),是JDK5中新增添的壹个功能。也就是说,assertEquals是Assert类中的壹系列的静态方法,壹般的使用方式是Assert assertEquals(),但是使用了静态包含后,前面的类名就可以省略了,使用起来更加的方便。

另外要注意的是,我们的测试类是壹个独立的类,没有任何父类。测试类的名字也可以任意命名,没有任何局限性。所以我们不能通过类的声明来判断它是不是一个测试类,它与普通类的区别在于它内部的方法的声明,我们接着会讲到。在测试类中,并不是每壹个方法都是用于测试的,所以我们必须使用“注解”来明确表明哪些是测试方法。“注解”也是JDK5的壹个新特性,用在此处非常恰当。我们可以看到,在某些方法的前有@Before、@Test、@Ignore等字样,这些就是注解,以壹个“@”作为开头。这些注解都是JUnit4自定义的,熟练掌握这些注解的含义,对于编写恰当的测试类非常重要。

接下来我们创建壹个测试类 CalculatorTestjava,代码如下:

package netoschinabairrfhoinntest;

import static orgjunitAssert;

import orgjunitTest;

import netoschinabairrfhoinnmainCalculator;

public class CalculatorTest {

private static Calculator calculator = new Calculator();

@Test

public void testAdd(){

calculatoradd(7);

calculatoradd(8);

assertEquals(15, calculatorgetReuslt());

}

}

首先,我们要在方法的前面使用@Test标注,以表明这是壹个测试方法。对于方法的声明也有如下要求:名字可以随便取,没有任何限制,但是返回值必须为void,而且不能有任何参数。如果违反这些规定,会在运行时抛出壹个异常。至于方法内该写些什么,那就要看你需要测试些什么了。比如上述代码中,我们想测试壹下add()方法的功能是否正确,就在测试方法中调用几次add函数,初始值为0,先加7,再加8,我们期待的结果应该是15。如果最终实际结果也是15,则说明add()方法是正确的,反之说明它是错的。assertEquals(15, calculatorgetResult());就是用来判断期待结果和实际结果是否相等,其中第壹个参数填写期待结果,第二个参数填写实际结果,也就是通过计算得到的结果。这样写好之后,JUnit 会自动进行测试并把测试结果反馈给用户。

如果想运行它,可以在 eclipse 的资源管理器中选择该类文件,然后点击右键,选择 Run As->JUnit Test 即可看到运行结果。

使用@Test 的属性 Ignore 指定测试时跳过这个方法

如果在写程序前做了很好的规划,那么哪些方法是什么功能都应该实现并且确定下来。因此,即使该方法尚未完成,他的具体功能也是确定的,这也就意味着你可以为他编写测试用例。但是,如果你已经把该方法的测试用例写完,但该方法尚未完成,那么测试的时候无疑是“失败”。这种失败和真正的失败是有区别的,因此 JUnit 提供了壹种方法来区别他们,那就是在这种测试函数的前面加上 @Ignore 标注,这个标注的含义就是“某些方法尚未完成,暂不参与此次测试”。这样的话测试结果就会提示你有几个测试被忽略,而不是失败。壹旦你完成了相应函数,只需要把@Ignore标注删去,就可以进行正常的测试。

比如说上面的测试类 Calculatorjava 中,假设我们的 Calculator 类的 multiply() 方法没有实现,我们可以在测试类 CalculatorTest 中先写如下测试代码:

package netoschinabairrfhoinntest;

import static orgjunitAssert;

import orgjunitIgnore;

import orgjunitTest;

import netoschinabairrfhoinnmainCalculator;

public class CalculatorTest {

private static Calculator calculator = new Calculator();

//此处代码省略

@Ignore("method square() not implemented, please test this later")

@Test

public void testSquare(){

calculatorsquare(3);

assertEquals(9, calculatorgetReuslt());

}

}

javazip压缩包过大解压失败的原因:网络传输不好导致文件下载损坏、网站提供的RAR压缩包最初被损坏、使用的下载工具不够完善。我们可以通过压缩软件里的“修复压缩文件”解决javazip压缩包过大解压失败的问题。

在Spring应用中,常常会用到“接口+实现类”的形式,即要实现类又要写一个方法差不多的接口,有时候感觉比较烦琐。其实,Eclipse可以根据类自动抽取出接口来。PersonServiceImpljava的代码如下

在上面代码的空白处点右键,或者在PersonServiceImpl类名上点右键 —> Refactor –> Extract Interface,

在“在Extract Interface”对话框中,Interface name框中输入接口名:PersonService,将addPerson和queryPerson方法钩选上

点OK后,即可自动生成PersonServiceImpljava的接口类PersonServicejava

而再看看PersonServiceImpl类代码有了什么变化

自动生成Junit测试类 在类名上点右键 –> New –> Other

在新建对话框中,选择Java >> Junit >> Junit Test Case

在“New Junit Test Case”对话框中,填写测试类名,此处,用默认(PersonServiceTest)即行,如果不想测试类与PersonService类置同一包下,可在Package中选择指定的包来存放测试类,此处也默认处理

点Next后进入下图,将要测试的方法钩选中,Finish即行

如果第一次建测试类,它要求加入JUnit的jar包,点OK即行

JUnit测试类PersonServiceTestjava便自动生成了

在Eclipse中自动生成接口和JUnit测试类的方法:

1、首先新建一个项目叫JUnit_Test,以编写一个Calculator类为例来说明,这是一个能够简单实现加减乘除、平方、开方的计算器类,然后对这些功能进行单元测试。

package andycpp;

public class Calculator {

    private static int result; // 静态变量,用于存储运行结果

    public void add(int n) {

        result = result + n;

    }

    public void substract(int n) {

        result = result - 1;  //Bug: 正确的应该是 result =result-n

    }

    public void multiply(int n) {

    }         // 此方法尚未写好

    public void divide(int n) {

        result = result / n;

    }

    public void square(int n) {

        result = n  n;

    }

    public void squareRoot(int n) {

        for (; ;) ;            //Bug : 死循环

    }

    public void clear() {     // 将结果清零

        result = 0;

    }

    public int getResult() {

        return result;

    }

}

2、将JUnit4单元测试包引入这个项目:在该项目上点右键,点“属性”,如图:

3、在d出的属性窗口中,首先在左边选择“Java Build Path”,然后到右上选择“Libraries”标签,之后在最右边点击“Add Library…”按钮,如下图所示:

在新d出的对话框中选择JUnit4并点击确定,如上图所示,JUnit4软件包就被包含进我们这个项目了。

4、生成JUnit测试框架:在Eclipse的Package Explorer中用右键点击该类d出菜单,选择“New à JUnit Test Case”。如下图所示:

5、在d出的对话框中,进行相应的选择,如下图所示:

6、点击“下一步”后,系统会自动列出你这个类中包含的方法,选择你要进行测试的方法。此例中,我们仅对“加、减、乘、除”四个方法进行测试。如下图所示:

之后系统会自动生成一个新类CalculatorTest,里面包含一些空的测试用例。你只需要将这些测试用例稍作修改即可使用。完整的CalculatorTest代码如下:

package andycpp;

import static orgjunitAssert;

import orgjunitBefore;

import orgjunitIgnore;

import orgjunitTest;

public class CalculatorTest {

    private static Calculator calculator = new Calculator();

    

    @Before

    public void setUp() throws Exception {

        calculatorclear();

    }

    @Test

    public void testAdd() {

        calculatoradd(2);

        calculatoradd(3);

        assertEquals(5, calculatorgetResult());

    }

    @Test

    public void testSubstract() {

        calculatoradd(10);

        calculatorsubstract(2);

        assertEquals(8, calculatorgetResult());

    }

    @Ignore("Multiply() Not yet implemented")

    @Test

    public void testMultiply() {

    }

    @Test

    public void testDivide() {

        calculatoradd(8);

        calculatordivide(2);

        assertEquals(4, calculatorgetResult());

    }

}

7、运行测试代码:按照上述代码修改完毕后,我们在CalculatorTest类上点右键,选择“Run As à JUnit Test”来运行我们的测试,如下图所示:

8、运行结果如下:

分类: 电脑/网络 >> 程序设计 >> 其他编程语言

解析:

JUnit是Java进行单元测试的一个框架, 需要下载junit, 38版本和后来的40以后版本编写测试的方法略有不同,

在382中需要导入junitframework中的类, 进行测试的类必须继承自TestCase类, 测试方法名称中需要含test字样, 可以在setup和teardown函数中管理一些每个测试函数都需要的资源比如数据库连接等,在测试函数中使用assert开头的函数来进行测试代码开发以下是从junit文档中摘出的范例:

import junitframeworkTest;

import junitframeworkTestCase;

import junitframeworkTestSuite;

/

Some simple tests

/

public class SimpleTest extends TestCase {

protected int fValue1;

protected int fValue2;

protected void setUp() {

fValue1= 2;

fValue2= 3;

}

public static Test suite() {

/

the type safe way

TestSuite suite= new TestSuite();

suiteaddTest(

new SimpleTest("add") {

protected void runTest() { testAdd(); }

}

);

suiteaddTest(

new SimpleTest("testDivideByZero") {

protected void runTest() { testDivideByZero(); }

}

);

return suite;

/

/

the dynamic way

/

return new TestSuite(SimpleTestclass);

}

public void testAdd() {

double result= fValue1 + fValue2;

// forced failure result == 5

assertTrue(result == 6);

}

public void testDivideByZero() {

int zero= 0;

int result= 8/zero;

result++; // avoid warning for not using result

}

public void testEquals() {

assertEquals(12, 12);

assertEquals(12L, 12L);

assertEquals(new Long(12), new Long(12));

assertEquals("Size", 12, 13);

assertEquals("Capacity", 120, 1199, 00);

}

public static void main (String[] args) {

junittextuiTestRunnerrun(suite());

}

}

在402中的变化是:

测试需要@junitTest的Annotation标记,其他部分也使用了Annotation标记,setup和teardown使用@junitBefore 和@junitAfter, 在eclipse31的环境中不支持402, 可以使用junit 402中提供的adapter类来帮助eclipse内置的junit发现新版本的测试函数

以上就是关于JUnit test 如何做Java静态方法测试全部的内容,包括:JUnit test 如何做Java静态方法测试、名词解释 什么是JUnit[1]、junit是什么等相关内容解答,如果想了解更多相关内容,可以关注我们,你们的支持是我们更新的动力!

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/web/9786594.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-02
下一篇 2023-05-02

发表评论

登录后才能评论

评论列表(0条)

保存