Java 测试Junit是否捕获到异常

Java 测试Junit是否捕获到异常,java,testing,junit,Java,Testing,Junit,我将从一个代码示例开始;我必须测试一个处理数据包的函数。在这个函数中,数据包被打开,当它不包含所有预期数据时,抛出一个InvalidParameterExeption,该选项被记录 public void handleData(dataPacket) { try { analyseData(dataPacket); } catch (InvalidParameterException e) { e.printStackTrace() } }

我将从一个代码示例开始;我必须测试一个处理数据包的函数。在这个函数中,数据包被打开,当它不包含所有预期数据时,抛出一个InvalidParameterExeption,该选项被记录

public void handleData(dataPacket) {
    try {
        analyseData(dataPacket);
    } catch (InvalidParameterException e) {
        e.printStackTrace()
    }
}
所以,如果一切顺利,我的异常将打印在我的终端上。 但是我怎样才能测试这个呢?我不能使用这个:(因为异常被捕获)


如何测试InvalidParameterException是否被抛出?

您无法捕获未抛出的异常-_- 只需测试“抛出异常方法”而不是“捕获异常”方法

@Test(expected = InvalidParameterExeption.class)
public void testIfFaultyDataPacketIsRecognised() {
    analyseData(faultyDataPacket);
}

理想情况下,您应该捕获并重新抛出异常。但是如果您不想这样做,那么为什么不按照预期在测试用例中捕获异常呢

@Test
public void testIfFaultyDataPacketIsRecognised () {
  try {
      handleData(faultyDataPacket);
      Assert.fail("Fail! Method was expected to throw an exception because faulty data packet was sent.")
  } catch (InvalidParameterException e) {
      // expected
  }
}

要么您不应该捕获异常,要么您应该删除@expected注释,并找出其他要使用的资源。打印堆栈跟踪无法很好地处理异常。你对该做什么感到困惑的事实表明,当出现坏数据包时,你的类的客户端会有什么感觉,他们不知道该做什么。为
a
编写一个测试,而不是
handleData
。我已经做过这个测试了。但我在更高的抽象层次上进行测试,并检查是否可以通过发送各种数据使我的系统崩溃。这些测试实际上是双重检查,但这不是必需的。你所说的throwins异常方法是什么意思?如果一个方法是私有的,怎么调用它?所以你必须调用handleData方法,handleData方法反过来调用这个方法。在这种情况下,您不能使用上述逻辑。
@Test
public void testIfFaultyDataPacketIsRecognised () {
  try {
      handleData(faultyDataPacket);
      Assert.fail("Fail! Method was expected to throw an exception because faulty data packet was sent.")
  } catch (InvalidParameterException e) {
      // expected
  }
}