Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/308.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java EasyMock不清楚错误:“不清楚”;预期:1,实际:1“;_Java_Testing_Easymock - Fatal编程技术网

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

Java EasyMock不清楚错误:“不清楚”;预期:1,实际:1“;,java,testing,easymock,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.AT

我考试不及格

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);
资产质量(“1”,1);
资产质量('1',1);
assertEquals(customObject,1);

我也有类似的错误。结果表明,该方法是在不同的线程上调用的。使方法在同一线程中执行解决了问题。

需要更多代码 我们将需要一个明确的答案,所以在这之前,这是我最好的猜测更多的代码

创建一个类的模拟 您在测试中的某个地方使用或模拟了类
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
类型,那么只需为
someValue
的最后一个参数实例一个
C
类对象即可

不清楚的错误 在某些情况下,错误是非常不清楚的,这一点是有道理的。您正在匹配接受测试中为
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)

而这份清单还远远不够完整。另外,请务必向我们反馈您的解决方案,以便社区能够从中学习

以下是潜在的解决方案:

  • 如果您的代码是多线程的,请尝试

  • 如果您使用的是createStrictMock,您可能需要确保方法调用的顺序正确,否则它可能会返回“预期的:1,实际的:1”或“预期的:至少0,实际的:1”


  • 您能否共享产生此错误的代码?请显示您的代码<代码>“1”!=1有时甚至
    “1”!=“1”
    。请验证您在模拟中指定的图形是否与对模拟的调用相同。将有一个对mock的调用,但它可能与您为expect调用提供的确切规范不匹配。我的测试使用了导致该错误的多线程类。请看@uditbansal可能是对的。但是一个代码示例和您收到的完整异常将有助于确认:)另外,如果您预期为null,请不要忘记在预期中使用
    EasyMock.isNull(MyClass.class)
    。您可能会收到一个空对象(不是空MyClass),它会抛出这种类型的错误。