java - 正确定义 jUnit 测试用例

标签 java unit-testing junit testcase

我是单元测试的新手,因此想做一些实际练习来熟悉 jUnit 框架。

我创建了一个实现字符串乘法器的程序

public String multiply(String number1, String number2)

为了测试乘法器方法,我创建了一个测试套件,其中包含以下测试用例(具有所有需要的整数解析等)

public class MultiplierTest {
    @Test
    public void testMultiply() {
      Multiplier multiplier = new Multiplier();
      // Test for 2 positive integers
      assertEquals("Result", 5, multiplier.multiply("5", "1"));

      // Test for 1 positive integer and 0
      assertEquals("Result", 0, multiplier.multiply("5", "0"));

      // Test for 1 positive and 1 negative integer
      assertEquals("Result", -1, multiplier.multiply("-1", "1"));

      // Test for 2 negative integers
      assertEquals("Result", 10, multiplier.multiply("-5", "-2"));

      // Test for 1 positive integer and 1 non number
      assertEquals("Result", , multiplier.multiply("x", "1"));

      // Test for 1 positive integer and 1 empty field
      assertEquals("Result", , multiplier.multiply("5", ""));

      // Test for 2 empty fields
      assertEquals("Result", , multiplier.multiply("", ""));
    } 
}

以类似的方式,我可以创建涉及边界情况(考虑数字是 int 值)甚至虚数值的测试用例。

1) 但是,上面最后 3 个测试用例的期望值应该是多少? (表示错误的特殊数字?)

2) 我错过了哪些额外的测试用例?

3) assertEquals() 方法是否足以测试乘法器方法,或者我是否需要其他方法,如 assertTrue()、assertFalse()、assertSame() 等

4) 这是开发测试用例的正确方法吗?我如何“确切地”从这个练习中受益?

5) 测试乘法器方法的理想方法应该是什么?

我在这里很无能。如果有人可以帮助回答这些问题,我将不胜感激。谢谢。

最佳答案

首先,你的代码是错误的,因为你有一个类但没有函数。我假设所有这些测试都在一个函数中?如果是这样,我会反对它。通常你想要一个测试来测试一件事:

public class MultiplierTests {
  @Test
  public void testSimpleMultiple() {
    assertEquals(...);
  }

  ...
}

其次,您在这里传递一个 int 作为结果:

assertEquals("Result", 5, multiplier.multiply("5", "1"));

但是 Multiplier.multiply() 返回一个 String?

所以如何测试取决于结果。如果传入一个空字符串,它会抛出异常吗?如果是这样,您可以定义您的 @Test 注释以表明它希望抛出异常:

@Test(expected = IllegalArgumentException.class)
public void test() {
  multiplier.multiply("", "5");
}

关于java - 正确定义 jUnit 测试用例,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2702870/

相关文章:

java - JDK提供的并发类是否需要使用实例自身的内在锁进行同步?

java - SpringBoot @interface 总结不同注解

java - Java 中的功能测试

build - Gradle里程碑4/5在具有插件实例化异常的测试中失败

java - 使用 hasNext() Scanner 方法仅允许一组 X 输入

java - 在 while 循环(或 for 循环)内创建一个数组,然后在外部使用该数组

java - servlet java 抛出的自定义 503 错误页面

java - 如何在 Java 中获取不同单词的数量?

c - 包装 open() 进行单元测试将使 gcov 无法打开 gcda 文件

SecurityComponent 黑洞我的 Controller 测试用例