java - Java单元测试

标签 java

我是 JUnit 测试的新手。

例如,我的项目中有一个 Misc 类:

public class Misc{

   public static int computeValue(int x,int y,int z)
   {
      int value = 0;

      if((x==y)||(z==0))
          value = x+2;

      else if(x>y)
          value = y+4;

      else 
          value = z;

      return value;
  }
}

我在 JUnit 类中进行了尝试,但我不太确定我是否正确完成了它。

public class MiscTest {

@Test
public void testXEqualToY() {

    //Only X is equal to Y and z is not zero
    int x = 5,y=5;
    int value = 0;
    value = Misc.computeValue(5, 5, 10);
    assertEquals("test error",x,y,value);
}

@Test
public void testZEqualZero(){
    //Only z is 0
    int x=4,y=8,z=0;

    int value = 0;
    value = Misc.computeValue(11,5,0);
    assertEquals("test error",z,value);

}

我应该在测试用例方法中放入什么来测试这些值?

最佳答案

Parameterized 会很有用。当您想要为一堆不同的输入情况指定预期结果时,参数化 确实很棒。此处只需要一个 @Test,只需简单添加 { 0, 0, 0, 2 },

即可添加新的测试条件

现在测试每个案例:

  • 当 x=y 时,期望 X+2
  • 当 z=0 时,期望 x+2
  • 当 x > y 时,期望 y+4
  • 否则,预计为 z

这是基本结构

 @RunWith(Parameterized.class)
class MyTest{

    @Parameters
    public static Collection<Object[]> data() {
            return Arrays.asList(new Object[][] {
                            { { 0, 0, 0, 2 },... });
    }


     int x,y,z, expectedResult;

   // add constructor here

   @Test
   public void testYEqualToZ(){
      int actualResult = Misc.computeValue(x,y,z);
      assertEquals(actualResult, expectedResult);
     }
}

然后使用以下测试用例:

  • 1, 1, 5, 3//x y 相等
  • 2, 2, 8, 4//再次
  • 3, 6, 0, 5//z 为 0 情况
  • 3, 2, 8, 6//x > y 情况
  • 3, 4, 8, 8//x < y 情况

不断添加案例,直到测试完所有可能的案例

关于java - Java单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/27865721/

相关文章:

java - 如何在选择第一项的情况下启动 Jlist?

java - 用于对具有相同标签的指标进行分组的自定义名称

java - For-each 循环不会打印第一个请求的行

java - Android 致命信号 11

Java Swing JMenu 不断消失

java - 构建包含所有依赖项的 JAR

java - HashMap 卡在了 put 上

Java套接字编程。如何在后台等待服务器响应?

java - 类似于 Couchbase 中的 SQL LIKE 语句

JTable 单元格更改上的 JAVA 更新数据库