抽象类中的createMock和非抽象方法

时间:2013-04-03 05:26:33

标签: java easymock

我有一个abstract课程,我想为测试目的而嘲笑:

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

如果我使用easyMock Foo mock = createNiceMock(Foo.class)然后拨打mock.baz(),我会收到java.lang.NullPointerException。如果我将baz()更改为final,那么事情就会起作用(我认为这与EasyMock无法模拟final方法有关)但我希望能够调用{ {1}}没有这样做。

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

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

abstract

但这太丑了。

1 个答案:

答案 0 :(得分: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