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. 什么是System.Transactions的实际用途?
- 4. jQuery的实际用途是什么?
- 5. toContain()的实际用途是什么?
- 6. JUnit测试失败
- 7. 忽略测试用例中的声明失败(JUnit)
- 8. 在IntelliJ IDEA中执行单个JUnit测试用例失败
- 9. 是否当运行测试用例时,jUnit测试用例实际上在数据库中插入数据
- 10. Spring MVC应用程序Junit测试用例失败
- 11. 的Cobertura与Ant脚本的JUnit测试用例失败
- 12. expectationForPredicate失败测试用例
- 13. 为什么我的junit测试在此代码中失败?
- 14. Junit测试用例
- 15. 为什么JUnit测试在Ant Build System中失败?
- 16. 什么是stream_wrapper_register在php中的实际用途?
- 17. Lua在Mac OS X中的一些实际用途是什么?
- 18. android中.so文件的实际用途是什么?
- 19. Junit测试用例失败:java.lang.IllegalStateException:无法加载ApplicationContext
- 20. JUnit测试用例失败:java.lang.AssertionError:预计空,却被:<null>
- 21. 测试失败:0通过,1失败当使用JUnit测试我的方法
- 22. 实例化jUnit测试类
- 23. 让JUnit失败,实际上并没有运行断言的测试
- 24. ES5提供的新方法的实际用途是什么?
- 25. 什么是PHP的睡眠()的实际用途?
- 26. resx文件的实际用途是什么?
- 27. 受保护构造函数的实际用途是什么?
- 28. 双向覆盖“bdo”的实际用途是什么?
- 29. .PDB文件的实际用途是什么?
- 30. 可挂载式发动机的实际用途是什么?
请考虑这篇博文中关于失败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