1

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メソッドをモックできないという事実に関係していると思います) が、これを行わずに呼び出すことができるようにしたいと考えbaz()ています。

非メソッドを呼び出すことができる EasyMock を使用してモック オブジェクトを作成する方法はありabstractますか?

私が現在使用している1つの回避策は次のとおりです。

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

しかし、これは非常に醜いです。

4

1 に答える 1

0

だから私は私の質問に対する解決策を見つけました。EasyMock で部分モックを作成できます。

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

これに対する1つの注意点は、クラスにインスタンス変数がある場合、使用し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 に答える