Junit测试布尔方法

时间:2011-05-25 04:00:51

标签: java junit

我在下面的方法中编写测试用例时遇到问题: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;
    }

}

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

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);
    }

}

3 个答案:

答案 0 :(得分:7)

您有很多问题:

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

我为您纠正了一些问题,只是验证了以下代码:

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);
    }

}

假设System.out.println()中对OddEven的调用仅限于调试,整个事情可能会崩溃为:

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));
    }
}

现在代码更短了,单元测试甚至涵盖了一个奇怪的情况,以便进行测量。

答案 1 :(得分:6)

两件事:

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

    public static boolean evenNum(double num){

    }

  • 您没有正确输入方法的名称。仔细看。另外,请考虑将其重命名为更可读的内容,例如isEven(...)

答案 2 :(得分:0)

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