bea*_*w08 43 java junit hamcrest
我正在使用hamcrest 1.3来测试我的代码.它只是一个骰子.我试图测试它以确保生成的数字小于13.我有一个打印语句打印生成的数字是什么.生成的数量始终小于13,但测试总是失败.有什么我做错了吗?
这是我正在测试的代码.
import java.util.Random;
public class Die {
private int numSides;
Random rand;
public Die(int numSides){
this.numSides = numSides;
rand = new Random(System.currentTimeMillis());
}
public int roll(){
return rand.nextInt(numSides) + 1;
}
}
Run Code Online (Sandbox Code Playgroud)
这是我的测试代码.
import static org.hamcrest.Matchers.*;
import static org.hamcrest.MatcherAssert.assertThat;
import org.junit.Test;
public class DieTest {
@Test
public void testRoll() {
Die x = new Die(12);
assertThat(x.roll(), is(lessThan(13)));
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:这是故障堆栈跟踪.
java.lang.SecurityException: class "org.hamcrest.Matchers"'s signer information does not match signer information of other classes in the same package
at java.lang.ClassLoader.checkCerts(Unknown Source)
at java.lang.ClassLoader.preDefineClass(Unknown Source)
at java.lang.ClassLoader.defineClassCond(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.security.SecureClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.defineClass(Unknown Source)
at java.net.URLClassLoader.access$000(Unknown Source)
at java.net.URLClassLoader$1.run(Unknown Source)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
at java.lang.ClassLoader.loadClass(Unknown Source)
at DieTest.testRoll(DieTest.java:12)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(Unknown Source)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(Unknown Source)
at java.lang.reflect.Method.invoke(Unknown Source)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:44)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:15)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:41)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:20)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:76)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:50)
at org.junit.runners.ParentRunner$3.run(ParentRunner.java:193)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:52)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:191)
at org.junit.runners.ParentRunner.access$000(ParentRunner.java:42)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:184)
at org.junit.runners.ParentRunner.run(ParentRunner.java:236)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:49)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:38)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:467)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:683)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:390)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:197)
Run Code Online (Sandbox Code Playgroud)
bea*_*w08 74
这是帮助我解决问题的网站.
http://code.google.com/p/hamcrest/issues/detail?id=128
hamcrest.jar需要在构建路径中的Junit库之前.
Roc*_*yMM 12
在我的Eclipse里面的Java Build Path部分的Project settings中,我以前添加了内部JUnit库,它使用了JUnit版本4.8和hamcrest-core版本1.1.我认为这在我的案例中导致了这个错误.
我在这里留下这些信息,也许其他人会从我的经验中受益.
使用junit-dep.jar而不是junit.jar-这是JUnit减去它的依赖项.Junit.jar包含旧版本的Hamcrest.
小智 5
约翰·马克(上方)建议
将文件重命名为
$ECLIPSE_HOME\plugins\org.hamcrest.core_1.3.0.v201303031735.jar类似名称*.bak或删除文件。”
重命名/删除文件导致我的Eclipse Junit库停止工作,但是用我的Maven存储库中相同版本的副本替换JAR文件使证书问题消失了。
(正如Google上的某位评论所述,hamcrest的Eclipse Junit副本存在证书问题,但Maven副本没有...)
| 归档时间: |
|
| 查看次数: |
28234 次 |
| 最近记录: |