Junit测试布尔方法

我在下面的方法中编写测试用例时EvenNum(double)问题: EvenNum(double)

 public class OddEven { /** * @param args */ public boolean evenNum(double num) { if(num%2 == 0) { System.out.print(true); return true; } else { System.out.print(false); return false; } } 

这是我写的测试用例,但我认为在这个测试用例中我有一个inheritance问题或逻辑问题。 应该是一个非常简单的但无法弄清楚。 这是我写的代码:

 import static org.junit.Assert.*; import org.junit.Test; public class OddEvenTest { @Test public void testEvenNum() { boolean ans = true; boolean val; double num= 6; val = OddEven.EvenNum(num) // cant inherit the method dont know why??? assertEquals(ans,val); } } 

两件事情 :

  • 您正在静态调用非静态方法。 该方法应声明为static:

    public static boolean evenNum(double num){
    。 。 。 }

  • 您没有正确键入方法的名称。 仔细看。 还要考虑将它重命名为更可读的东西, isEven(...)

你有很多问题:

  • 您试图静态调用非静态方法
  • java中的方法名称区分大小写,您已将案例混淆了。

我为你纠正了一些事情,只是validation了下面的代码:

OddEven.java:

 public class OddEven { public boolean evenNum(double num) { if(num%2 == 0) { System.out.print(true); return true; } else { System.out.print(false); return false; } } } 

OddEvenTest.java

 import static org.junit.Assert.*; import org.junit.Test; public class OddEvenTest { @Test public void testEvenNum() { boolean ans = true; boolean val; double num = 6; OddEven oddEven = new OddEven(); val = oddEven.evenNum(num); assertEquals(ans,val); } } 

假设在OddEven中对System.out.println()的调用严格用于调试,整个过程可能会崩溃为:

OddEven.java

 public class OddEven { public boolean evenNum(double num) { return num%2 == 0; } } 

OddEvenTest.java

 import static org.junit.Assert.*; import org.junit.Test; public class OddEvenTest { @Test public void testEvenNum() { OddEven oddEven = new OddEven(); assertTrue(oddEven.evenNum(6)); assertFalse(oddEven.evenNum(5)); } } 

代码现在更短,unit testing甚至涵盖了一个奇怪的情况,以获得良好的衡量标准。

这似乎对我来说是疯狂的,编程也疯了。 所有方法都是评估num%2 == 0.您可能只需要在任何地方需要的代码并丢弃方法及其测试。 如果你必须保留方法,它依赖于数学身份,你不需要测试它们。 你也可以测试1 + 1 == 2。