繁体   English   中英

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

[英]createMock and non-abstract methods in an abstract class

我有一个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 ,那么事情将baz()进行(我认为这与EasyMock无法模拟final方法有关),但是我希望能够不这样做而调用baz()

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

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

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

但这太丑了。

因此,我找到了解决问题的方法。 您可以在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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM