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。