1

我有一个abstract类,我想模拟出来以进行测试:

public abstract class Foo {
    public abstract void bar();
    public void baz() {
      System.out.print("Hi from baz!");
    }
}

如果我使用 easyMockFoo mock = createNiceMock(Foo.class)然后调用mock.baz()我会得到一个java.lang.NullPointerException. 如果我更改baz()final,事情会顺利进行(我认为这与 EasyMock 无法模拟final方法的事实有关)但我希望能够在baz()不这样做的情况下调用。

有没有办法使用 EasyMock 创建一个模拟对象,允许我调用我的非abstract方法?

我目前使用的一种解决方法是:

Foo mock = new Foo() {
    @Override
    public void bar() {
        return;
    }
}

但这太丑了。

4

1 回答 1

0

所以我找到了我的问题的解决方案。您可以在 EasyMock 中创建部分模拟:

Foo mock = EasyMock.createMockBuilder(Foo.class) 
                .addMockedMethod("bar")
                .createNiceMock();

对此的一个警告是,如果类有实例变量,因为您没有使用new它们,它们将不会被初始化!如果有人对此方面有解决方法,那将很有用。那是为这个类创建一个部分:

public abstract class Foo {
    public double myInstanceVariable = 2;
    public abstract void bar();
    public void baz() {
      System.out.print("Hi from baz!");
    }
}

在哪里可以打电话mock.myInstanceVariable和得到2

于 2013-04-03T19:59:21.270 回答