junit 4 -assertequeral iSNNOVEND在Hashmap Collection上工作
@Test
public void checkbuildGraph_ifGraphExists()
{
Graph expected =buildGraph(g1.name);
assertEquals(expected.nodes, g1.nodes);
}
我正在尝试测试buildgraph方法,该方法返回了图形对象的构建图,然后将其与手工图进行比较以检查它们是否相等。在价值方面,它们在当然不是参考方面是平等的。尽管如此,我
java.lang.AssertionError: expected:<[Node@3ada9e37]> but was:<[Node@2a3046da]>
at org.junit.Assert.fail(Assert.java:89)
at org.junit.Assert.failNotEquals(Assert.java:835)
at org.junit.Assert.assertEquals(Assert.java:120)
at org.junit.Assert.assertEquals(Assert.java:146)
at TraceAnalyserTest.checkbuildGraph_ifGraphExists(TraceAnalyserTest.java:131)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
在测试类中制作了Graph G1,而预期来自另一个类别。我猜声明是根据节点基于其地址比较每个对象内部的值的节点
@Test
public void checkbuildGraph_ifGraphExists()
{
Graph expected =buildGraph(g1.name);
assertEquals(expected.nodes, g1.nodes);
}
I am tring to test buildgraph method that returns a built graph of Graph Object, then comparing it with hand made graph to check if they are equal. They are equal in terms of values not in terms of reference of course. Nonetheless, I am getting
java.lang.AssertionError: expected:<[Node@3ada9e37]> but was:<[Node@2a3046da]>
at org.junit.Assert.fail(Assert.java:89)
at org.junit.Assert.failNotEquals(Assert.java:835)
at org.junit.Assert.assertEquals(Assert.java:120)
at org.junit.Assert.assertEquals(Assert.java:146)
at TraceAnalyserTest.checkbuildGraph_ifGraphExists(TraceAnalyserTest.java:131)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.junit.runners.model.FrameworkMethod$1.runReflectiveCall(FrameworkMethod.java:59)
at org.junit.internal.runners.model.ReflectiveCallable.run(ReflectiveCallable.java:12)
at org.junit.runners.model.FrameworkMethod.invokeExplosively(FrameworkMethod.java:56)
at org.junit.internal.runners.statements.InvokeMethod.evaluate(InvokeMethod.java:17)
at org.junit.internal.runners.statements.RunBefores.evaluate(RunBefores.java:26)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.BlockJUnit4ClassRunner$1.evaluate(BlockJUnit4ClassRunner.java:100)
at org.junit.runners.ParentRunner.runLeaf(ParentRunner.java:366)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:103)
at org.junit.runners.BlockJUnit4ClassRunner.runChild(BlockJUnit4ClassRunner.java:63)
at org.junit.runners.ParentRunner$4.run(ParentRunner.java:331)
at org.junit.runners.ParentRunner$1.schedule(ParentRunner.java:79)
at org.junit.runners.ParentRunner.runChildren(ParentRunner.java:329)
at org.junit.runners.ParentRunner.access$100(ParentRunner.java:66)
at org.junit.runners.ParentRunner$2.evaluate(ParentRunner.java:293)
at org.junit.runners.ParentRunner$3.evaluate(ParentRunner.java:306)
at org.junit.runners.ParentRunner.run(ParentRunner.java:413)
at org.eclipse.jdt.internal.junit4.runner.JUnit4TestReference.run(JUnit4TestReference.java:89)
at org.eclipse.jdt.internal.junit.runner.TestExecution.run(TestExecution.java:41)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:542)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.runTests(RemoteTestRunner.java:770)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.run(RemoteTestRunner.java:464)
at org.eclipse.jdt.internal.junit.runner.RemoteTestRunner.main(RemoteTestRunner.java:210)
Graph g1 is made in test class and expected is from a different class. I guess assertEqual is comparing the nodes based on their address not their values inside each object
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
assertEqual
is comparing the nodes based on theirequals(Object)
methods.看起来他们正在从类对象
中继承自己的身份比较,相当于==
运算符。 “地址”不是本地Java概念。如果要基于节点值而不是节点身份进行比较,则需要提供
equals(Object)
实现将执行的。如果这样做,那么您还应提供与您的新equals()
方法一致的hashcode()
方法,这意味着彼此比较的节点是确定的也具有相同的哈希代码。如果您不能覆盖节点'
equals(object)
方法,则不能以您尝试做的方式使用assertequals()
。但是,您可以在测试课上或在辅助班级中写下自定义断言方法,该方法可以为您完成您想要的工作。assertEqual
is comparing the nodes based on theirequals(Object)
methods. It looks like they are inheriting theirs from classObject
, which yields an identity comparison, equivalent to the==
operator. "Address" is not a native Java concept.If you want to compare based on node values instead of node identities then you need to provide an
equals(Object)
implementation that will do so. And if you do that, then you should also provide ahashCode()
method consistent with your newequals()
method, meaning that nodes that compare equal to each other are certain to also have the same hash code.If you cannot override the nodes'
equals(Object)
methods then you cannot useassertEquals()
in the way you are trying to do. But you could write a custom assertion method in your test class or in a helper class that would do the job you want for you.