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

在JUnit中测试捕获的异常

殳自怡
2023-03-14

我试图创建一个测试来验证我的代码(见下面的伪代码)是否正确捕获异常。我知道JUnit能够测试代码是否用以下代码抛出异常:

@Test (expected = ArrayIndexOutOfBoundsException.class)

然而,我正在测试的软件的原始代码捕获了这个异常并打印了一条消息

catch (ArrayIndexOutOfBoundsException E) {
    System.out.print("The output should be of even length!");
}

JUnit是否有办法验证此消息?或者我应该改变一下我的流行语?

注:我已阅读,我应使用以下内容:

@Rule 
public ExpectedException thrown = ExpectedException.none();

@Test
public void decodeOddLengthInput() {
    thrown.expect(ArrayIndexOutOfBoundsException.class);
    thrown.expectMessage("Message");

但是程序崩溃,因为它无法识别ExpectedException对象。

我尝试测试的方法的伪代码(出于隐私原因,不要发布确切的内容):

public String decode(byte[] array){
try{
for(int i= 0; i<array.length; i= i+2){
//basically it crashes when input is an array of odd length (because of i=i+2)
   get byte at array[i] and turn it into a string;
   }
 }
catch (ArrayIndexOutOfBoundsException E) { System.out.print("Message!");}

  return string ;
  }

共有1个答案

吴腾
2023-03-14

您的软件方法没有重新抛出带有消息的异常。它只是通过打印消息来处理异常。在这种情况下,调用测试方法将永远不会知道此异常,因此您无法测试此场景或验证消息。

 类似资料:
  • 我已经为以下函数编写了Junit测试用例。当检查JACOCO测试覆盖率时。它显示测试用例只覆盖了try块。我是编写测试用例的新手。如何在测试用例中覆盖异常和catch块 这里有一个方法 和测试方法

  • 我构建了一个有3个属性的帐户类:余额、所有者、acctNo。帐户类有2个构造函数,一个接受3个属性,一个不接受数据。帐户类有设置和获取方法以及存款和取款方法。 我还构建了一个类,该类从类扩展而来。将此类修改为类后,取款方法或此方法尝试将余额设置为零以下,将抛出。 JUnit测试人员修改测试方法,将尝试提取超过当前余额的可用,所以做测试方法。我需要修改JUnit测试透支帐户,以便它捕获异常,并捕获。

  • 问题内容: 我真的是java的新手。 我正在构造函数上运行一些JUnit测试。构造函数是这样的:如果为其参数之一赋予null或空字符串,则应该抛出异常。 当我在JUnit中使用null或空字符串参数测试此构造函数时,即使我几乎100%确信将此类参数传递给它时,构造函数方法确实会引发异常,我也会看到一条红色的条。 如果该方法以预期的方式引发异常,则JUnit中是否应该没有绿色的条形?还是当异常抛出按

  • 问题内容: 编辑:目前没有JUnit 4。 嗨,您好, 我对使用JUnit进行“智能”异常测试有疑问。目前,我这样做是这样的: 如您所见,对于每个应该引发异常的函数,我都需要一个try / catch块。似乎不是执行此操作的好方法-还是没有可能减少try / catch的使用? 问题答案: 我建议您需要分解为多个单独的测试。各个try / catch块似乎彼此非常独立。您可能还希望将通用初始化逻辑

  • 我想寻求帮助,了解如何在JUnit测试中捕获IOException,以测试我的代码在发生错误时是否会抛出正确的异常。 以下是我的主要代码: 这是我的JUnit: 我想我必须在JUnit测试中创建一个错误的路径来抛出该异常,但我没能得到我想要的结果。我很感谢你的帮助。谢谢

  • 我应该如何测试异常?我可以mock connector并且我可以赋予它抛出异常的行为,但是我不明白下一步该怎么做。