为什么JUnit说我的布尔测试应该是void?

5
我在谷歌上搜索了很多网站,并点击了许多链接,但没有一个可用的答案能帮助我。令人遗憾的是,一些网站引用了相同的答案,但我无法解决我的问题。那个链接是 (Junit testing for a boolean method)...
尝试运行测试时的输出是:"方法testAddObject()应该为void。" 实际上,这个方法是一个布尔方法,如果我将测试设置为void,则会出现不同的错误。我不能随意将其设置为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
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个回答

8
所有的JUnit测试方法都应该是void类型。它在测试断言中确认你的代码是否产生了预期的输出。对于你的场景,assertTrue方法将检查你的方法返回的输出是否为true
还有其他类型的断言,比如assertEqualsassertFalse。关于不同类型的断言的更多信息,请参阅文档
因此,你可以像这样修改你的测试用例。
@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


3

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

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

如果你需要更多的断言选项而不仅仅是True/False,可以在这里找到它们:http://junit.sourceforge.net/javadoc/org/junit/Assert.html


1
你可以使用assert方法来检查你的测试方法add(object). assertEquals(expected result, actual result) assert方法有很多变种。

1
JUnit会在其org.junit.internal.runners.MethodValidator类中内部调用validateTestMethods,并验证返回类型是否为Void.TYPE等内容。
if (each.getReturnType() != Void.TYPE)
    fErrors.add(new Exception("Method " + each.getName() + " should be void"));

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

谢谢。这是一个很好的解释,这就是为什么Junit测试必须是void类型。 是的,我们可以使用assetTrue等来检查布尔值进行更改。 但我一直想知道的问题是为什么Junit只允许void返回类型。 - Danish

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
}

0

JUnit的工作方式是通过调用这些方法来实现的。如果发生以下情况,这些方法将引起JUnit的注意(标记为RED/Failed):

  • 发生异常(当然)
  • 其中一个断言失败,例如assertEquals("expected text", "factual text as result of your program")

0

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

请使用assertXXX来测试结果。


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