【发布时间】:2011-05-02 14:03:40
【问题描述】:
如何在 JUnit 4 中将测试标记为预期失败?
在这种情况下,我想继续运行这个测试,直到上游修补了一些东西。忽略测试有点过分,因为那时我可能会忘记它。我也许可以添加一个@expected 注释并捕获assertThat 抛出的异常,但这似乎也与预期的行为有关。
这是我当前的测试结果:
@Test
public void unmarshalledDocumentHasExpectedValue()
{
doc = unmarshaller.unmarshal(getResourceAsStream("mydoc.xml"));
final ST title = doc.getTitle();
assertThat(doc.getTitle().toStringContent(), equalTo("Expected"));
}
该断言应该成功,但由于上游错误,它没有成功。然而,该测试是正确的;它应该成功。我发现的几乎所有替代方案都具有误导性。现在我认为@Ignore("This test should pass once fixed upstream") 是我最好的选择,但我仍然必须记得回到它。我更喜欢测试运行。
在 Python 中,我可以使用 expectedFailure 装饰器:
class ExpectedFailureTestCase(unittest.TestCase):
@unittest.expectedFailure
def test_fail(self):
self.assertEqual(1, 0, "broken")
在C++中使用Qt的QTestLib,你可以使用QEXPECT_FAIL:
QEXPECT_FAIL("", "Will be fixed next version", Continue);
QCOMPARE(i, 42);
在上述两种情况下,单元测试都会运行,这是我希望发生的。我在 JUnit 中遗漏了什么吗?
【问题讨论】:
标签: java unit-testing junit