1

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

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

Stack stack = new Stack();

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

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

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

4

2 回答 2

3

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

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

@Test
public void testTopIsEmpty() throws StackEmptyException {
    thrown.expect(StackEmptyException.class);
    stack.top();
}
于 2012-10-22T23:14:52.707 回答
2

在 JUnit 中测试异常的正确方法是:

@Test(expected = StackEmptyException.class)
public final void testTopIsEmpty() throws Exception
{
    stack.top();
}
于 2012-10-22T22:52:19.387 回答