我用
测试失败了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
这个错误意味着什么?为什么会这样?请建议。
答案 0 :(得分:3)
我有类似的错误。事实证明,该方法是在不同的线程上调用的。使方法在同一个线程中执行解决了这个问题。
答案 1 :(得分:2)
这是潜在的解决方案:
如果您的代码是多线程的,请尝试How should I unit test threaded code?
如果您正在使用createStrictMock,您可能需要确保方法调用的顺序正确,否则它可能会返回“expected:1,actual:1”或“expected:至少0”之类的内容,实际:1“
答案 2 :(得分:0)
你看到的只是在两个参数上调用toString()
方法的结果。所以实际上你可能正在做任何组合:
assertEquals(1L, 1);
assertEquals("1", 1);
assertEquals('1', 1);
assertEquals(customObject, 1);
答案 3 :(得分:0)
我们需要更多代码才能获得明确的答案,所以在此之前,这是我最好的猜测。
您使用PowerMock或EasyMock在测试中的某处嘲笑了A
课程,例如:
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)
。这可能是你的测试中出现错误的一些实验:
String package="com.example.android";
这个清单远未完成。另外,请务必使用您的解决方案回复我们,以便社区可以从中学习。