junit 4 -assertequeral iSNNOVEND在Hashmap Collection上工作

发布于 2025-02-02 11:02:55 字数 2975 浏览 0 评论 0原文

@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 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

樱花落人离去 2025-02-09 11:02:55

我猜sostertequal是根据节点基于其地址的节点而不是每个对象中的值进行比较

assertEqual is comparing the nodes based on their equals(Object) methods.看起来他们正在从类对象中继承自己的身份比较,相当于==运算符。 “地址”不是本地Java概念。

如果要基于节点值而不是节点身份进行比较,则需要提供equals(Object)实现将执行的。如果这样做,那么您还应提供与您的新equals()方法一致的hashcode()方法,这意味着彼此比较的节点是确定的也具有相同的哈希代码。

如果您不能覆盖节点'equals(object)方法,则不能以您尝试做的方式使用assertequals()。但是,您可以在测试课上或在辅助班级中写下自定义断言方法,该方法可以为您完成您想要的工作。

I guess assertEqual is comparing the nodes based on their address not their values inside each object

assertEqual is comparing the nodes based on their equals(Object) methods. It looks like they are inheriting theirs from class Object, 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 a hashCode() method consistent with your new equals() 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 use assertEquals() 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.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文