【问题标题】:junit test - Type mismatch: cannot convert from void to Boolean [duplicate]junit 测试 - 类型不匹配:无法从 void 转换为布尔值 [重复]
【发布时间】:2012-06-20 19:48:50
【问题描述】:

我有以下测试 -

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

【问题讨论】:

  • storeItem 不返回值,因此您无法存储/比较/任何内容。
  • 显然storeItem() 不会返回boolean 类型。

标签: java junit


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

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

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

    【讨论】:

      【解决方案3】:

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

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

      【讨论】:

        【解决方案4】:

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

        【讨论】:

          【解决方案5】:

          如果您想测试保存失败时的情况,并假设如果保存失败应该抛出异常,那么您可以将测试更改为如下所示:

          @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) {
              }
           }
          

          【讨论】:

          • 测试保存机制,但不测试它是否真的有效——你需要重新读回它,特别是如果有任何自定义序列化。这只是集成测试 JRE。
          【解决方案6】:

          回答基本问题:

          您必须阅读该文件。

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

          【讨论】:

            猜你喜欢
            • 2018-02-14
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2018-08-26
            • 2012-03-05
            • 2014-10-23
            • 1970-01-01
            • 2021-07-29
            相关资源
            最近更新 更多