为什么junit说我的布尔测试应该是无效的?

时间:2014-07-31 04:42:36

标签: java junit boolean

我在谷歌搜索并点击链接后链接到许多不同的网站,没有任何可用的答案帮助我。这是不幸的,因为一些网站引用了相同的答案,我无法解决这个问题。该链接是(Junit testing for a boolean method)...

尝试运行测试的输出是:“方法testAddObject()应该是无效的。”实际的方法是一个布尔方法,如果我将测试设置为void,我会得到一个不同的错误。我不能随便让它无效。

我将使用代码段。首先是我的代码,然后是我的jUnit测试。

代码:

public boolean add(Object ob) {
    boolean isSuccessful = true;

    /**
     * if array is full, get new array of double size,
     * and copy items from old array to new array
     */
    if (isFull()) 
    {
        expandArray();
    } 
    else if (!isFull())
    {
        // add new item; update numItems
        items[numItems] = ob;
        numItems++;         
    }
    else
        isSuccessful = false;

    return isSuccessful;            
} // end add

JUNIT TEST:

@Test
public boolean testAddObject() {
    boolean result = true;
    boolean ans;
    AList arraylist = new AList(3);
    arraylist.add("apple");
    arraylist.add("pear");
    ans = arraylist.add("melon");
    return ans == result;
}

7 个答案:

答案 0 :(得分:8)

所有JUnit测试方法都应该无效。它在测试断言中确认您的代码是否产生了预期的输出。对于您的方案,assertTrue方法将检查您的方法的输出是否返回true

还有其他类型的断言,例如assertEqualsassertFalse。有关不同类型断言的更多信息,请查看documentation

所以你可以像这样修改你的测试用例

@Test
public void testAddObject() {
    boolean ans;
    AList arraylist = new AList(3);
    arraylist.add("apple");
    arraylist.add("pear");
    ans = arraylist.add("melon");

    assertTrue(ans);
}

其中assertTrue检查ans是一个值为true

的布尔值

答案 1 :(得分:3)

JUnit方法不能有返回类型,因此您可以使用以下方法测试成功:

@Test
public void testAddObject() {
//Your data setup and invocation of the add method
assertTrue(ans == result);
}

如果你想要超过真/假的话,有很多断言选项,可以在这里找到它们:http://junit.sourceforge.net/javadoc/org/junit/Assert.html

答案 2 :(得分:1)

您可以使用assert方法检查您的测试方法add(object)。 assertEquals(预期结果,实际结果) assert方法有很多变种。

答案 3 :(得分:0)

是的,您的测试方法应如下所示

@Test
public void testAddObject() {
  // inside this method you should test add() method
  // create input object(Object obj=new Object())
  // create a instance of the class which has add()
  // call add() method with obj
  // validate return value
}

答案 4 :(得分:0)

因为JUnit的工作方式是调用这些方法。如果出现以下情况,这些方法将给予JUnit注意(标记为RED / Failed)

  • 例外情况(当然)
  • 其中一个断言失败,例如assertEquals(“预期文本”,“作为程序结果的事实文本”)

答案 5 :(得分:0)

JUnit测试方法必须为返回类型。

请断言XXX以测试结果。

答案 6 :(得分:0)

JUnit从其validateTestMethods类内部org.junit.internal.runners.MethodValidator调用,并验证,例如,返回类型是否为Void.TYPE

if (each.getReturnType() != Void.TYPE)
    fErrors.add(new Exception("Method " + each.getName() + " should be void"));

因此,您必须使用 void 作为返回类型。