我是EasyMock的新手,通常使用Mockito,所以如果这是一个愚蠢的问题请原谅,但我有一个期望的电话,它使用我正在测试的类中的一个字段。问题是,由于execute在实际方法调用之前运行,因此该字段为空。
public class ClassToTest {
SomeObject someObject = null;
AnotherObject anotherObject;
public String testMethod() {
someObject = new SomeObject();
String result = anotherObject.someMethod(someObject);
System.out.println(result);
}
// Some other code here
}
ClassToTest testClass = new ClassToTest();
AnotherObject mockedObject = createMock(AnotherObject.class);
expect(mockedObject.someMethod(testClass.someObject)).andStubReturn("test");
testClass.testMethod();
在Mockito中,这将被写为
when(mockObject.someMethod(testClass.someObject)).thenReturn("test");
并且将使用someObject在执行中的那个点。但是,使用EasyMock,因为someObject在设置expect调用时为null,所以调用期望null作为参数。
当实际调用someMethod时,EasyMock中是否有一种方法可以获取代码中的任何字段?
答案 0 :(得分:1)
我不确定你是否能用EasyMock做的描述。
以下是一些替代方案:
<强> 1)强>
如果要接受任何类型的对象,则可以使用EasyMock.anyObject(SomeClass.class)作为方法参数
expect(mockedObject.someMethod(EasyMock.anyObject(SomeClass.class)).andReturn("test")
<强> 2)强>
您可以使用PowerMock(https://code.google.com/p/powermock/wiki/MockConstructor)模拟SomeObject的构造函数,然后期望在模拟构造函数时返回的对象。它看起来像这样
SomeObject myObject = new SomeObject()
PowerMock.expectNew(SomeObject.class).andReturn(myObject);
expect(mockedObject.someMethod(myObject)).andReturn("test");
如果您使用PowerMock路线,请检查该链接,因为使用PowerMock时需要一些额外的代码行。