当前位置: 首页 > 知识库问答 >
问题:

尝试/捕获空隙类型

谷泳
2023-03-14

我是编程新手,有一个新手问题。我正在尝试像这样运行测试…

@Test
public void rememberTest()
throws DuplicateException{

    try{
        personA.remember(sighting4);
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
    try{
        assertEquals(personA.remember(sighting3), "The list already contains this sighting");
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
}

第一个try/catch会编译,但第二个不会。它告诉我这里不允许使用“void”类型。为什么我不能用虚空?如果我不能使用void类型,那么我如何构建我的测试来抛出异常呢?

一些背景信息:rememer测试是对将项目添加到ArrayList的记住方法的测试。

在Person类中,记住的方法如下:

public void remember(final Sighting s)
throws DuplicateException
{
    if(lifeList.contains(s)) {
        throw new DuplicateException("The list already contains this sighting");
    }
    lifeList.remember(s); 
}

如果您需要更多信息,请提出要求,我会根据需要发布。

共有3个答案

简嘉赐
2023-03-14

为了抛出异常并在测试类中捕获它,请执行如下操作:

 try{
            personA.remember(sightingSame);
        }
        catch (DuplicateException e) {
            assertEquals("The list already contains this sighting", e.getMessage());
        }
        catch (Exception e) {
            fail("Failed" + e.getMessage());
        }
邓令
2023-03-14

我认为你应该使用@Expected注释来代替assert,因为它是一个测试用例,所以它期待重复的异常

呼延靖
2023-03-14

因为您的方法已经确保不会添加重复的值,所以我建议从您的代码中删除< code>assertEquals,

@Test
public void rememberTest()
throws DuplicateException{

    try{
        personA.remember(sighting4);
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
    try{
        personA.remember(sighting3), //this will throws Exception if sighting3 is already in.
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
}

要演示将您的代码编辑为:

@Test
public void rememberTest()
throws DuplicateException{

    Sighting s1=//initialize s1
    Sighting s2=s1;
    try{
        personA.remember(s1);
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
    try{
        personA.remember(s2), //This will throw an exception because s1 and s2 are pointed to the same object
    }
    catch (Exception e) {
        fail("Failed" + e.getMessage());
    }
}
 类似资料:
  • 我有一个存储过程似乎没有正确记录错误。 代码有错误,但 catch 块似乎未生效。 try块相当长,但错误部分很简单,并且在最后出现,所以我已经对此进行了预测。 proc失败的错误是我们的老朋友“列名或提供的值的数量与表定义不匹配”。我已经修复了这个错误 - 这是一个愚蠢的懒惰错误 - 但我感到困惑为什么我的错误日志记录过程似乎没有工作 - 没有行入到我的 ExtractsErrorLog 表中。

  • 问题内容: 我经常遇到如下情况: 仍然需要尝试-最终在内部捕获块。 克服此问题的最佳实践是什么? 问题答案: 写一个类,其中包含捕获和记录此类异常的方法,然后根据需要使用。 您最终会看到如下内容: 您的客户端代码将类似于: 更新: 自Java 7开始,各种JDBC接口都得到了扩展,而以上代码回答了原始问题,如果您直接针对JDBC API编写代码,则现在可以对其进行结构化:

  • 问题内容: 我一直在看代码,并且看到了尝试资源的机会。我以前使用过标准的try-catch语句,看起来它们在做同样的事情。所以我的问题是“ 尝试使用资源”与“尝试捕获 ”之间的区别是什么,哪个更好。 这是尝试使用资源: 问题答案: 尝试使用资源的重点是确保可靠地关闭资源。 当你不使用try-with-resources时,存在一个潜在的陷阱,称为异常屏蔽。当try块中的代码引发异常,而finall

  • 问题内容: 我只是在学习Java异常处理和Java。我制作了一个Swing GUI,用户将在两个字段中输入整数,然后单击带有算术函数的单选按钮,答案将出现在第三个文本字段中。我想包含一个try / catch块,以在用户将前两个字段之一留为空白或输入除整数以外的内容时捕获异常,以及如果用户尝试将其除以零则输入第二个catch。该窗体可以正常工作,但是不会捕获错误,只能返回堆栈跟踪并使程序崩溃。我感

  • 问题内容: 我有一个需要类似以下内容的场景 在我的尝试,我会,数据,将其与基于处理其他数据集。 在随后。有可能阻止吗?下面是伪代码: 问题答案: 无需创建表,您只需声明一个表变量(查询结束时该变量将自动消失)。

  • 我有一个返回< code>List的方法。现在我想知道如何正确放置< code>try/catch块。如果我将< code>return语句放在< code>try中,我会得到错误 并非所有代码路径都返回值 如果我放置在之后(就像我目前所做的那样),即使在之后,它也会返回。那么最好的方法应该是什么? 方法如下:

  • 问题内容: 下面的代码询问用户他/她想要多少个赛车手。 如果在代码中输入数字,则代码会跳出循环,并且程序的其余部分可以正常运行;但是,当我输入诸如“ awredsf”之类的内容时,它应该捕获该异常,并且确实如此。它没有连续提示用户,而是连续循环,这对我来说没有意义。 连续循环时,程序打印如下: 多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车手应该参加比赛?多少赛车

  • 问题内容: 我正在尝试构建一个发出ajax请求的Google Chrome扩展程序。与GMail Checker扩展程序类似。问题是,当我使用jquery进行请求时,并输入了错误的用户名/密码时,它会静默失败,并忽略错误回调函数。 如果我将ajax调用从background.html脚本(在开发人员窗口中看不到请求)中移出到options.html脚本中,则会得到一个对话框来重新进行身份验证。如果