一个返回布尔值的方法的Junit测试

10

我有问题编写一个测试用例针对下面的方法: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个回答

9

您有一些问题:

  • 您试图静态调用非静态方法
  • 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);
    }

}

假设在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));
    }
}

代码现在更加简洁,单元测试甚至包含了一个奇怪的情况以确保代码质量。

像 isEven 这样的方法应该是静态的。我的意思是,OddEven 对象到底是什么......?我不会投反对票,因为你的声望接近我的 4 倍,一定知道我不知道的东西。 - Amir Afghani
@Amir Afghani:oddEven()方法在这里肯定可以是静态的,将其变为静态可能是一个明智的选择。但理想情况下,我们希望在重构之前先通过单元测试。因此,我针对所提供的OddEven类编写了单元测试。一旦有了通过的单元测试,我们就可以进行重构。此外,在单元测试狂热者中存在一种思想流派,认为所有静态事物都是邪恶的。搜索一下相关主题,你就可以了解更多。另外,不要让任何人的声誉欺骗你。无论他们的声誉如何,任何人都可能在某些事情上犯错。 :) - Asaph

6

两件事:

  • 您静态调用了一个非静态方法。该方法应声明为静态方法:

    public static boolean evenNum(double num) {

    }

  • 您没有正确输入方法名称。仔细查看。还可以考虑将其重命名为更易读的名称,例如isEven(...)


@Splitter:你在使用任何集成开发环境吗? :) - R Sun

0

对我来说,这似乎是疯狂的测试和编程。该方法所做的只是评估num % 2 == 0。您可以在所有需要的地方编写代码并丢弃该方法及其测试。如果必须保留该方法,则它依赖于数学恒等式,您不需要测试这些内容。您可以测试1 + 1 == 2。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接