【问题标题】:EasyMock Expect Field Value is NullEasyMock Expect 字段值为 Null
【发布时间】:2015-03-20 14:16:26
【问题描述】:

我是 EasyMock 的新手,通常使用 Mockito,所以如果这是一个愚蠢的问题,请原谅,但我有一个使用我正在测试的类中的一个字段的期望调用。问题是由于在实际方法调用之前运行了execute,因此该字段为null。

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 为 null,因此调用期望 null 作为参数。

在实际调用 someMethod 时,EasyMock 中有没有一种方法可以获取代码中该点的任何字段?

【问题讨论】:

  • 我不太确定我是否理解 foo 的来源 - 这是您之前捕获的东西吗?
  • 确实——用一个简短但完整的例子会更容易理解。
  • 我更新了一些代码,非常粗略的逻辑场景草图。

标签: java mocking mockito easymock


【解决方案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 时需要一些额外的代码行。

【讨论】:

  • 认为 #2 是解决方案,因为我需要为多个特定实例执行此操作。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2011-06-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多