Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 如何编写单元测试?_Java_Unit Testing - Fatal编程技术网

Java 如何编写单元测试?

Java 如何编写单元测试?,java,unit-testing,Java,Unit Testing,我有一个Java类。我该怎么做 在我的例子中,我让类做一个二进制和。它接受两个字节[]数组,对它们求和,然后返回一个新的二进制数组 使用正确的输入定义正常情况下的预期和期望输出 现在,通过声明一个类来实现测试,将其命名为任何名称(通常类似于TestAddingModule),并向其添加TestAddd方法(如下面的方法): 编写一个方法,并在上面添加@Test注释 在方法中,运行二进制和assertEquals(expectedVal,calculatedVal) 通过运行方法来测试您的方法

我有一个Java类。我该怎么做


在我的例子中,我让类做一个二进制和。它接受两个
字节[]
数组,对它们求和,然后返回一个新的二进制数组

  • 使用正确的输入定义正常情况下的预期和期望输出

  • 现在,通过声明一个类来实现测试,将其命名为任何名称(通常类似于TestAddingModule),并向其添加TestAddd方法(如下面的方法):

    • 编写一个方法,并在上面添加@Test注释
    • 在方法中,运行二进制和
      assertEquals(expectedVal,calculatedVal)
    • 通过运行方法来测试您的方法(在Eclipse中,右键单击,选择RunAs)→ JUnit测试)

  • 根据需要添加其他案例

    • 测试如果存在整数溢出,二进制和不会引发意外异常
    • 测试您的方法是否优雅地处理空输入(下面的示例)


  • 这是一个非常普通的问题,有很多方法可以回答

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

    在您的特定示例中,您可以测试以下内容:

  • 两个正数之间的简单加法。添加它们,然后验证结果是否符合预期
  • 正数和负数之间的加法(返回带有第一个参数符号的结果)
  • 正数和负数之间的加法(返回带有第二个参数符号的结果)
  • 两个负数之间的加法
  • 导致溢出的加法
  • 为了验证结果,可以使用org.junit.Assert类中的各种assertXXX方法(为了方便起见,可以执行“import static org.junit.Assert.*”)。这些方法测试一个特定的条件,如果没有验证,则测试失败(可选地使用特定的消息)

    案例中的testcase类示例(未定义方法内容):


    如果您不习惯编写单元测试,而是通过编写特殊测试来测试代码,然后“直观地”验证(例如,您编写了一个简单的main方法,该方法接受使用键盘输入的参数,然后打印结果,然后继续输入值并验证自己的结果是否正确),然后,您可以开始以上述格式编写此类测试,并使用正确的assertXXX方法验证结果,而不是手动执行。这样,如果必须进行手动测试,则可以更轻松地重新运行测试。

    就像前面提到的@CoolBeans一样,请查看。这里有一个简短的介绍,让您也可以开始使用JUnit4.x


    最后,如果您真的想了解更多关于测试和测试驱动开发(TDD)的知识,我建议您阅读Kent Beck的以下书籍:。

    我为IntelliJ和Eclipse提供了这篇文章

    Eclipse:

    要为您的项目进行单元测试,请遵循以下步骤(我使用Eclipse编写此测试):

    1-单击新建->Java项目

    2-写下你的项目名称并点击finish

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

    4-写下你的类名并点击finish

    然后,像这样完成课程:

    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测试用例

    6-检查setUp()并单击finish。SetUp()将是初始化测试的位置

    7-点击OK

    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-在PackageExplorer中单击您的测试类,然后单击RunAs->JUnit测试

    10-这是测试的结果

    IntelliJ: 注意,我在截图中使用了IntelliJ IDEA community 2020.1。此外,您需要在执行这些步骤之前设置jre。我正在使用JDK11.0.4

    1-右键单击项目的主文件夹->新建->目录。你应该称之为“测试”。 2-右键单击测试文件夹并创建适当的包。我建议创建与原始类相同的打包名称。然后,右键单击测试目录->将目录标记为->测试源根目录。 3-在test目录的正确包中,您需要创建一个Java类(我建议使用test.Java)。 4-在创建的类中,键入“@Test”。然后,在IntelliJ提供的选项中,选择将“JUnitx”添加到类路径。 5-在你的测试课上写下你的测试方法。方法签名类似于:

    @Test
    public void test<name of original method>(){
    ...
    }
    
    以下是我添加的导入:

    import org.junit.jupiter.api.Assertions;
    import org.junit.jupiter.api.Test;
    

    这是我写的测试:

    您可以检查以下方法:

    Assertions.assertTrue(f.flipEquiv(node1_1, node2_1));
    
    Assertions.assertEquals(<Expected>,<actual>);
    Assertions.assertTrue(<actual>);
    ...
    
    Assertions.assertEquals(

    如果您的测试通过,结果如下:


    我希望它能有所帮助。您可以在GitHub中看到项目的结构。

    其他答案已经向您展示了如何使用JUnit来设置测试类。JUnit不是唯一的Java测试框架。但是,专注于使用框架的技术细节会有损于指导您操作的最重要概念,因此我将谈谈这些

    • 测试(各种各样的事物)将某物的实际行为(被测系统,SUT)与其预期行为进行比较

    • 自动化测试可以使用
      Assertions.assertTrue(f.flipEquiv(node1_1, node2_1));
      
      import org.junit.jupiter.api.Assertions;
      import org.junit.jupiter.api.Test;
      
      Assertions.assertEquals(<Expected>,<actual>);
      Assertions.assertTrue(<actual>);
      ...