我有以下测试 -
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返回任何东西,我只是想测试它,所以也许我的测试本身就错了。如果是这种情况,将非常感谢任何有关如何修复测试的建议。
答案 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) {
}
}