1

我有以下测试 -

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

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

它在测试什么...

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 返回任何东西,我只是想测试它,所以也许我的测试本身就是错误的。如果是这种情况,任何有关如何修复测试的建议将不胜感激。

4

6 回答 6

3

storeItem()void返回类型,但代码试图将其分配给Boolean: 这是非法的。

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

public void testStore()
{
    try
    {
        itemSrvc.storeItem(items);
    }
    catch (ItemNotStoredException e)
    {
        Assert.fail("storeItem() failure: " + e.getMessage());
    }
}
于 2012-06-18T19:29:42.240 回答
3

的返回类型storeItem()void,这是您要捕获的Boolean result.

于 2012-06-18T19:29:46.330 回答
2

storeItem 不返回任何内容,但您正在分配一个布尔值作为该函数的结果。

您需要从 storeItem 方法返回一个布尔值。

于 2012-06-18T19:29:11.847 回答
2

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

于 2012-06-18T19:29:30.130 回答
1

回答基本问题:

您必须阅读该文件。

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

于 2012-06-18T19:32:35.923 回答
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) {
    }
 }
于 2012-06-18T19:33:14.330 回答