Hoà*_*ong 6 java junit unit-testing
我正在申请UnitTest一段时间,今天我遇到了一些非常奇怪的事情.考虑以下代码:
TestObject alo = null;
assert alo != null; // Pass!!!
Assert.assertNotNull(alo); // Fail, as expected.
Run Code Online (Sandbox Code Playgroud)
我google了一下,发现assert是java内置的,而assertNotNull是JUnit支持的.但我无法理解为什么断言不抱怨null对象?
Rya*_*son 10
Hoang,我认为你在Java语言断言和JUnit断言之间有点混淆.
Java中的assert关键字在1.4中添加,旨在允许验证类中的内部一致性.最佳实践建议是在私有方法中使用它们来测试程序不变量.当断言失败时,抛出java.lang.AssertionError并且通常不会被捕获.这个想法是他们可以在调试期间启用它们并在生产代码中禁用(这是默认设置),但坦率地说,我认为它们并没有真正流行起来.我没有看到他们使用太多.
JUnit还以org.junit.Assert包中的许多不同静态方法的形式存在断言.这些旨在验证给定测试的结果.这些断言也会抛出一个java.lang.AssertionError,但是JUnit框架被设置为捕获并记录这些错误,并在测试运行结束时生成所有失败的报告.这是断言的更常见用法,IMO.
您显然可以使用其中任何一个,但JUnit断言更具表现力,您不必担心启用或禁用它们.另一方面,它们并不真正用于业务代码.
编辑:这是一个有效的代码示例:
import org.junit.Assert;
import org.junit.Test;
public class MyTest {
@Test
public void test() {
Object alo = null;
assert alo != null // Line 9
Assert.assertNotNull(alo); // Line 10
}
}
Run Code Online (Sandbox Code Playgroud)
这是禁用Java断言的运行输出(默认值):
c:\workspace\test>java -cp bin;lib\junit-4.8.1.jar org.junit.runner.JUnitCore MyTest
JUnit version 4.8.1
.E
Time: 0.064
There was 1 failure:
1) test(MyTest)
java.lang.AssertionError:
at org.junit.Assert.fail(Assert.java:91)
...
at MyTest.test(MyTest.java:10)
...
Run Code Online (Sandbox Code Playgroud)
这是启用Java断言的运行(-ea):
c:\workspace\test>java -ea -cp bin;lib\junit-4.8.1.jar org.junit.runner.JUnitCore MyTest
JUnit version 4.8.1
.E
Time: 0.064
There was 1 failure:
1) test(MyTest)
java.lang.AssertionError:
at MyTest.test(MyTest.java:9)
...
Run Code Online (Sandbox Code Playgroud)
请注意,在第一个示例中,Java断言传递,而在第二个示例中,它失败.
归档时间: |
|
查看次数: |
12266 次 |
最近记录: |