如何编写单元测试?

问题

我有一个做二进制求和的java类,我仍在试图弄清楚如何进行单元测试,但我不知道该怎么做。我用谷歌搜索过,我得到的最好的解释是来自维基百科的页面:http://en.wikipedia.org/wiki/Unit_testing

但是我仍然不确定如何对这个程序进行测试。该程序所做的基本上是2字节[]并添加它们并返回新的二进制数组。用Java编写。我该怎么测试呢?


#1 热门回答(111 赞)

  • 使用正确的输入定义正常情况下的预期和期望输出。
  • 现在,通过声明一个类来实现测试,将其命名为任何东西(通常类似于TestAddingModule),并将testAdd方法添加到它(例如下面的那个):编写一个方法,然后在其上面添加@Test注释。在该方法中,运行二进制和和assertEquals(expectedVal,calculatedVal)。通过运行方法测试你的方法(在Eclipse中,右键单击,选择Run as→JUnit test)。 //正常添加
    @测试
    public void testAdd1Plus1()
    {
        int x = 1; int y = 1;
        assertEquals(2,myClass.add(x,y));
    }
  • 根据需要添加其他案例。如果存在整数溢出,请测试二进制和不会引发意外异常。测试你的方法正常处理Null输入(下面的示例)。 //如果你使用0作为null的默认值,请确保你的类适用于该情况。
    @测试
    public void testAdd1Plus1()
    {
        int y = 1;
        assertEquals(0,myClass.add(null,y));
    }

#2 热门回答(57 赞)

要为你的项目进行单元测试,请按照以下步骤操作(我使用Eclipse编写此测试):

1-单击New - > Java Project。

Create Project

2-记下项目名称,然后单击"完成"。

Create Project

3-右键单击你的项目。然后,单击New - > Class。

Create Class

4-记下你的课程名称,然后点击完成。

Create Class

然后,完成这样的类:

public class Math {
    int a, b;
    Math(int a, int b) {
        this.a = a;
        this.b = b;
    }
    public int add() {
        return a + b;
    }
}

5-单击文件 - >新建 - > JUnit测试用例。

Create JUnite Test

6-检查setUp()并单击完成。 SetUp()将是你初始化测试的地方。

Check SetUp()

7-单击"确定"。

Add JUnit

8-在这里,我只添加7和10.所以,我希望答案是17.完成你的测试类如下:

import org.junit.Assert;
import org.junit.Before;
import org.junit.Test;
public class MathTest {
    Math math;
    @Before
    public void setUp() throws Exception {
        math = new Math(7, 10);
    }
    @Test
    public void testAdd() {
        Assert.assertEquals(17, math.add());
    }
}

9-在package explorer中单击你的测试类,然后单击Run as - > JUnit Test。

Run JUnit Test

10-这是测试的结果。

Result of The Test

我希望它有所帮助。


#3 热门回答(13 赞)

这是一个非常通用的问题,有很多方法可以解答。

如果要使用JUnit创建测试,则需要创建测试用例类,然后创建单独的测试方法,以测试测试中类/模块的特定功能(单个测试用例类通常与单个"生产"类相关联,正在测试)并且在这些方法中执行各种操作并将结果与​​正确的结果进行比较。尝试覆盖尽可能多的角落情况尤为重要。

在你的具体示例中,你可以测试以下内容:

  • 两个正数之间的简单加法。添加它们,然后验证结果是否符合预期。
  • 正数和负数之间的加法(返回带有第一个参数符号的结果)。
  • 正数和负数之间的加法(返回带有第二个参数符号的结果)。
  • 两个负数之间的加法。
  • 导致溢出的添加。

要验证结果,可以使用org.junit.Assert类中的各种assertXXX方法(为方便起见,你可以执行'import static org.junit.Assert。*')。这些方法测试特定条件,如果它不验证(使用特定消息,可选),则测试失败。

你的案例中的示例测试用例类(未定义方法内容):

import static org.junit.Assert.*;

public class AdditionTests {
    @Test
    public void testSimpleAddition() { ... }


    @Test
    public void testPositiveNegativeAddition() { ... }


    @Test
    public void testNegativePositiveAddition() { ... }


    @Test
    public void testNegativeAddition() { ... }


    @Test
    public void testOverflow() { ... }
}

如果你不习惯编写单元测试,而是通过编写特殊测试来测试代码,然后"直观地"验证(例如,你编写一个简单的主方法,接受使用键盘输入的参数,然后打印出结果 - 然后你继续输入值并在结果正确的情况下验证自己),然后你可以从上面的格式编写这样的测试开始,并使用正确的assertXXX方法验证结果,而不是手动完成。这样,如果必须进行手动测试,则可以更轻松地重新运行测试。