1

次のコードがあるとします。

protected int returnFourtyTwo() {
    evilMethod(new Object, "");
    return 42;
}

protected static void evilMethod(Object obj, String string) {
    throw new RuntimeException("This is me being evil.");
}

私がやろうとしているのは、単体テストでランタイム例外をスローせずに returnFourtyTwo() メソッドを実行することです。うまくいく前に、suppress() メソッドを使用してクラス コンストラクターをバイパスできましたが、非静的クラスで (複数の引数を持つ) 静的メソッドをバイパスしなければならなかったのはこれが初めてです。残念ながら、このトピックに関するリソースは少し不足しています。

4

3 に答える 3

1

@Dave で言及されているように、静的メソッドをモックすることが唯一の方法です。PowerMock でそれを行うことができます。

Mockito を使用した静的メソッドのモックを参照してください。

于 2015-08-05T16:35:33.700 に答える
0

実際のメソッド実装の複雑さに応じて、リターン コールを例外のスローから分離し、例外をスローしないリターン コールでテストすることができます。多くの場合、奇妙な int など42の独自の変数が対応するものを説明するためにも最適です。常に42 の場合は、静的で最終的なものです。

これは、ここであなたの正確な状況に対して行うことですが、これは実際の問題からの主要な単純な抽象化であると推測しているため、以前に提案したように、おそらくまだモックしたいでしょう。

static final int theAnswerToLife = 42;

protected int returnFourtyTwo() {
    evilMethod(new Object, "");
    return getTheAnswerToLife();
}

protected int getTheAnswerToLife() {
    return theAnswerToLife;
}

protected static void evilMethod(Object obj, String string) {
    throw new RuntimeException("This is me being evil.");
}
于 2015-08-05T16:43:18.560 に答える