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

Sea*_*ick 3 java junit boolean

我在谷歌搜索并点击链接后链接在许多不同的网站上,没有任何可用的答案帮助我.这是不幸的,因为一些网站引用了相同的答案,我无法解决这个问题.那个链接是(Junit测试一个布尔方法)......

尝试运行测试的输出是:"方法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
Run Code Online (Sandbox Code Playgroud)

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

kha*_*out 8

所有JUnit测试方法都应该是无效的.它在测试断言中确认您的代码是否产生了预期的输出.对于您的方案,该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);
}
Run Code Online (Sandbox Code Playgroud)

其中assertTrue检查该ANS是具有值的布尔true


Ruc*_*era 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
}
Run Code Online (Sandbox Code Playgroud)