我正在使用“测试驱动设计”概念编写Stack类。

在setUp()方法中,我的堆栈是用0个这样的元素创建的

Stack stack = new Stack();


这是我尝试的测试,以捕获在setUp()之后立即调用top时将引发的StackEmptyException。

@Test
public final void testTopIsEmpty() throws StackEmptyException
{
  StackEmptyException thrown = null;
  try
  {
    stack.top();
  }
  catch (StackEmptyException caught)
  {
    thrown = caught;
  }
  assertThat(thrown, is(instanceOf(StackEmptyException.class)));
}


我的问题在最后一行。我不明白为什么我的代码不起作用!

最佳答案

ExpectedException可用于验证是否引发了异常。可以在方法中间进行检查,以确保较早的方法调用不会意外引发相同的异常。

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

@Test
public void testTopIsEmpty() throws StackEmptyException {
    thrown.expect(StackEmptyException.class);
    stack.top();
}

10-07 21:04