EasyMock不清楚错误:“预期:1,实际:1”

时间:2013-12-25 07:07:29

标签: java testing easymock

我用

测试失败了
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

这个错误意味着什么?为什么会这样?请建议。

4 个答案:

答案 0 :(得分:3)

我有类似的错误。事实证明,该方法是在不同的线程上调用的。使方法在同一个线程中执行解决了这个问题。

答案 1 :(得分:2)

这是潜在的解决方案:

  1. 如果您的代码是多线程的,请尝试How should I unit test threaded code?

  2. 如果您正在使用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)

需要更多代码

我们需要更多代码才能获得明确的答案,所以在此之前,这是我最好的猜测。

创建一个类的模拟

您使用PowerMockEasyMock在测试中的某处嘲笑了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";

这个清单远未完成。另外,请务必使用您的解决方案回复我们,以便社区可以从中学习。