Junit测试布尔方法

Spl*_*ter 8 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;
    }

}
Run Code Online (Sandbox Code Playgroud)

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

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

}
Run Code Online (Sandbox Code Playgroud)

Asa*_*aph 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;
            }

        }
}
Run Code Online (Sandbox Code Playgroud)

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

}
Run Code Online (Sandbox Code Playgroud)

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

OddEven.java

public class OddEven {
    public boolean evenNum(double num) {
        return num%2 == 0;
    }
}
Run Code Online (Sandbox Code Playgroud)

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));
    }
}
Run Code Online (Sandbox Code Playgroud)

现在代码更短了,单元测试甚至涵盖了一个奇怪的情况.


Ami*_*ani 6

两件事情 :

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

    public static boolean evenNum(double num){

    }

  • 您没有正确键入方法的名称.仔细看.还要考虑将其重命名为更具可读性的内容,isEven(...)