我失败了测试
java.lang.AssertionError:
Expectation failure on verify:
A.logon(null): expected: 1, actual: 1
at org.easymock.internal.MocksControl.verify(MocksControl.java:226)
at org.easymock.EasyMock.verify(EasyMock.java:2080)
at com.ATest.test
这个错误意味着什么?为什么会这样?请建议。
我有类似的错误。事实证明,该方法是在不同的线程上调用的。使该方法在同一线程中执行解决了该问题。
这是潜在的解决方案:
你看到的只是两个参数调用的toString()
方法的结果。所以实际上你可能正在做任何组合:
assertEquals(1L, 1);
assertEquals("1", 1);
assertEquals('1', 1);
assertEquals(customObject, 1);
我们需要更多代码来获得明确的答案,所以在这种情况发生之前,这是我最好的猜测。
你使用A
或PowerMock在你的测试中的某个地方嘲笑EasyMock,类似于:
A mockedA = EasyMock.createMock(A.class);
因此,在特定测试期间发生的模拟类A
上的所有行为(此处缺少代码)应该预期:
final String someValue = "someValue";
EasyMock.expect(mockedA.logon(EasyMock.isA(String.class))).andReturn(someValue)
我完全猜测这个logon
方法的签名,因为我不知道你的A
类实现。在我的猜测中,logon
方法需要一个String
参数(可以通过任何类或原语)并返回另一个String
值。
如果你匹配另一个参数,比如类B
的参数,你需要将上面的代码更新为:
EasyMock.expect(mockedA.logon(EasyMock.isA(B.class))).andReturn(someValue)
对于返回参数的类型也可以这样说,如果它是C
类型的实例,则为C
最后一个参数的someValue
类对象。
您有一个有效的观点,即在某些情况下错误非常明显。您正在匹配测试中接受null
参数对象的内容。
现在null
可以通过几种方式匹配,例如只需要固定的null
值或EasyMock.isA(class)
。这可能是你的测试中出现问题的一些实验,如下所示:
EasyMock.expect(mockedA.logon(null)).andReturn(someValue)
EasyMock.expect(mockedA.logon(EasyMock.isA(SomeClass.class)).andReturn(someValue)
EasyMock.expect(mockedA.logon(EasyMock.isNull(SomeClass.class)).andReturn(someValue)
EasyMock.expect(mockedA.logon(aVariableHoldingNull)).andReturn(someValue)
EasyMock.expect(mockedA.logon(EasyMock.eq(aVariableHoldingNull)).andReturn(someValue)
EasyMock.expect(mockedA.logon(EasyMock.anyObject(SomeClass.class)).andReturn(someValue)
EasyMock.expect(mockedA.logon(EasyMock.isNull()).andReturn(someValue)
这份清单远未完成。另外,请务必使用您的解决方案回复我们,以便社区可以从中学习。