JUnit测试用例中“失败”的实际用途是什么?JUnit测试用例中“失败”的实际用途是什么?
回答
,我认为它是有用的一些情况:
- 标志着一个测试,是不完整的,所以它失败,并警告你,直到你可以完成它
- 确保抛出一个异常:
try{ // do stuff... fail("Exception not thrown"); }catch(Exception e){ assertTrue(e.hasSomeFlag()); }
注:
由于JUnit4,有是测试一个异常被抛出一个更优雅的方式: 使用注释@Test(expected=IndexOutOfBoundsException.class)
然而,这不会,如果你的工作还想要检查异常,那么你仍然需要fail()
。
我认为通常的用例是在负面测试中没有异常时调用它。
类似下面的伪代码:
test_addNilThrowsNullPointerException()
{
try {
foo.add(NIL); // we expect a NullPointerException here
fail("No NullPointerException"); // cause the test to fail if we reach this
} catch (NullNullPointerException e) {
// OK got the expected exception
}
}
如果您没有在catch块中检查某些内容,则可以使用@ExpectedException(NullNullPointerException.class)方法注释来声明您期望有一种特殊类型的异常。 – FrVaBe 2010-11-17 08:10:07
可以说你是为当被测试的代码应该抛出一个异常
try{
bizMethod(badData);
fail(); // FAIL when no exception is thrown
} catch (BizException e) {
assert(e.errorCode == THE_ERROR_CODE_U_R_LOOKING_FOR)
}
这是我如何使用失效方法的-ve流程编写测试用例。
有你的测试用例可以在
- 最终顺利通过三种状态:被测试函数执行成功,返回预期
- 不传递 数据:被测函数成功执行,但不符合预期 返回的数据
- 失败:该函数没有成功执行,这是不是
意为(与期望发生异常的负面测试案例不同) 发生)。
如果您使用的是eclipse,那么三种状态分别由绿色,蓝色和红色标记表示。
我对第三种情况使用失败操作。
例如:public Integer add(integer a,Integer b){return new Integer(a.intValue()+ b。的intValue())}
- 传递情形:a =新基于整数(1)中,b =新的整数(2)和该函数返回3
- 不传递情形:a =新基于整数(1)中,b =新的整数(2)和函数返回比3
- 失败案例等SOEM值:A = NULL,b = null,并且函数抛出
如果你看看JUnit的源代码,你会发现断言使用'fail()'。 – 2016-06-02 19:42:33
我在的情况下使用它在那里的东西一个NullPointerException可能在我的@Before方法中出错了。
public Object obj;
@Before
public void setUp() {
// Do some set up
obj = new Object();
}
@Test
public void testObjectManipulation() {
if(obj == null) {
fail("obj should not be null");
}
// Do some other valuable testing
}
是的,测试前提条件很好。但是,如果您想确保'@ Before'方法成功,则最好直接在该方法中检查它。作为奖励,至少JUnit和TestNG甚至会报告来自'@ Before' /'@ After'方法的错误的不同失败,所以可以看到问题不在测试本身。 – sleske 2016-06-17 11:51:06
我举个例子,使用fail()
表明,尚未完成(它发生)的测试;否则,他们会表现出成功。
这可能是由于我不了解NUnit中存在的某种不完整()功能。
简单地使用:
org.junit.Assert.fail("Exception expected");
最重要的使用情况很可能是异常检查。
虽然junit4包含expected element用于检查是否发生异常,但它好像不是新的junit5的一部分。使用fail()
而不是expected
的另一个优点是可以将它与finally
结合使用,从而允许测试用例清理。
dao.insert(obj);
try {
dao.insert(obj);
fail("No DuplicateKeyException thrown.");
} catch (DuplicateKeyException e) {
assertEquals("Error code doesn't match", 123, e.getErrorCode());
} finally {
//cleanup
dao.delete(obj);
}
正如另一条评论所述。有一个测试失败,直到你可以完成实施它听起来也是合理的。
- 1. JUnit测试用例失败
- 2. JUnit测试用例失败
- 3. Junit测试:什么是失败?
- 4. JUnit测试失败案例
- 5. 测试用例即使实际失败也不会失败
- 6. 为什么这个JUnit测试用例失败?
- 7. toContain()的实际用途是什么?
- 8. 什么是System.Transactions的实际用途?
- 9. Socket.ExclusiveAddressUse的实际用途是什么?
- 10. Android NDK的实际用途是什么?
- 11. array_diff_uassoc的实际用途是什么?
- 12. jQuery的实际用途是什么?
- 13. 如何在测试用例失败时发送JUNIT失败?
- 14. JUnit测试失败
- 15. JUnit测试失败
- 16. JUnit测试失败
- 17. JUnit测试失败
- 18. MongoDB实例失败测试
- 19. Ant JUnit测试用例失败报告未报告测试用例名称
- 20. 忽略测试用例中的声明失败(JUnit)
- 21. 在IntelliJ IDEA中执行单个JUnit测试用例失败
- 22. 在JUnit测试中使用旧实例
- 23. 是否当运行测试用例时,jUnit测试用例实际上在数据库中插入数据
- 24. Spring MVC应用程序Junit测试用例失败
- 25. 为什么我的junit测试在此代码中失败?
- 26. expectationForPredicate失败测试用例
- 27. 测试用例失败fwrite()
- 28. 如何覆盖失败的JUnit测试用例的行为
- 29. 的Cobertura与Ant脚本的JUnit测试用例失败
- 30. Selenium JUnit测试失败
请考虑这篇博文中关于失败vs预期注释的相对优点:http://blog.jooq.org/2016/01/20/use-junits-expected-exceptions-sparingly/ – lbalazscs 2016-02-05 22:16:59
@sleske“如果你还想要检查异常,那么你仍然需要失败()“ - 不行。 ExpectedException是这样的,请参阅https://github.com/junit-team/junit4/wiki/exception-testing – kraxor 2017-11-15 12:22:53
@kraxor:真的,我在写答案时不知道它(它可能甚至不是然后)。 – sleske 2017-11-15 22:39:57