junit test - 类型不匹配:无法从void转换为Boolean

时间:2012-06-18 19:27:01

标签: java junit

我有以下测试 -

public void testStore() throws ItemNotStoredException {
    Boolean result = itemSrvc.storeItem(items);
    Assert.assertFalse(result);
        }

但我收到错误类型不匹配:无法从void转换为Boolean。

它在测试什么...

public void storeItem(Items items) throws ItemNotStoredException {
    try { 
        ObjectOutputStream output = new
                ObjectOutputStream (new FileOutputStream ("itemdatabase"));

        output.writeObject(items);
        output.flush();
        output.close();
    } catch (IOException e) {
        throw new ItemNotStoredException ("Unable to store file", e);
    }


}

澄清 - 我不希望storeItem返回任何东西,我只是想测试它,所以也许我的测试本身就错了。如果是这种情况,将非常感谢任何有关如何修复测试的建议。

6 个答案:

答案 0 :(得分:3)

storeItem()有一个void返回类型,但代码正在尝试将其分配给Boolean:这是非法的。

可能重组测试(假设没有预期的例外):

public void testStore()
{
    try
    {
        itemSrvc.storeItem(items);
    }
    catch (ItemNotStoredException e)
    {
        Assert.fail("storeItem() failure: " + e.getMessage());
    }
}

答案 1 :(得分:3)

storeItem()的返回类型为void,这是您尝试捕获的Boolean result

答案 2 :(得分:2)

store Item不会返回任何内容,但是您将指定一个布尔值作为该函数的结果。

您需要从商店Item方法返回一个布尔值。

答案 3 :(得分:2)

请注意,您正在对返回void(nothing)的方法进行方法调用,但是尝试将此结果存储在布尔值中!

答案 4 :(得分:1)

回答基本问题:

您必须阅读该文件。

或者,更好的是,注入输出流,以便在测试中定义它,然后直接读取对象流。

答案 5 :(得分:1)

如果要在保存失败时测试案例,并假设如果保存失败则应抛出异常,那么您可以将测试更改为如下所示:

@Test(expected= ItemNotStoredException.class) 
public void testStore() throws ItemNotStoredException {
    itemSrvc.storeItem(items);
}

或者如果您使用的是古老版本的JUnit:

public void testStore() throws Exception {
    try {
        itemSrvc.storeItem(items);
        Assert.fail();
    }
    catch (ItemNotStoredException e) {
    }
 }