3

テスト用にモックしようとしているライブラリがあります...次のような静的メソッド実装を備えたJava 8インターフェースがあります。

public interface Router {
    public static Router router(Object param) {
        return new RouterImpl(param);
    }
}

そして、私はその戻り値をモックしようとしています:

PowerMockito.mockStatic(Router.class);
PowerMockito.doReturn(mockRouter).when(Router.router(any()));

しかし、デバッガーでテストを実行すると、モック インスタンスが返されません。

静的モックのさまざまな順列を試しましたが、静的メソッドがモック値を返すことができません。何かご意見は?

4

2 に答える 2

4

あなたはそれを正しくやっていますが、PowerMock で静的インターフェイス メソッドのモックが実装/修正されるまで待つ必要があります。このプル リクエストをご覧ください: https://github.com/jayway/powermock/issues/510

注: Javassist の問題は既に修正されています。

https://github.com/jboss-javassist/javassist/pull/11

于 2015-11-10T21:04:10.510 に答える
0

モックできる抽象化でラップしてみませんか?

class RouterFactory {

    Router createRouter(Object param) {
        return Router.router(param);
    }
}

そして、あなたのクラスでそれを使用してください

class YourClass {
private final RouterFactory routerFactory;

YourClass(RouterFactory routerFactory) {
this.routerFactory = routerFactory;
}

void doSth() {
   // do sth    
}

}

その後、問題なく RouterFactory をモックでき、Powermock を使用する必要はありません。

于 2015-09-12T09:45:10.163 に答える