簡體   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