10

「部分的なモック」とそれを必要とするコードについて、なぜこれほど多くの嫌悪が起こっているのでしょうか?

(理論上の)実装例を次に示します。

public ComplexResult1 operationA(Stimulus a) {
    {
        ...
        result = ...;
    }
    auditTheChange(a);
}
public ComplexResult2 operationB(Stimulus b) {
    {
        ...
        result = ...;
    }
    auditTheChange(b);
    return result;
}
void auditTheChange(Stimulus stim) {
    // do a bunch of stuff to record the change
    // and interact with another outside service
}

さて、私の理解では、これはよくリファクタリングされたコードです。

operationA と operationB を UNIT テストし、各シナリオで監査が行われること確認したいが、監査コードの詳細をテストする必要がない場合は、部分モックを使用します。

非常に多くのプロジェクト (EasyMock、Mockito など) がリファクタリングを推奨する理由は何ですか?

4

3 に答える 3

4

監査が本当にクラスの内部機能である場合、コードは単体テストの一部としてテストする必要があります。クラスが複雑な操作と監査の両方を処理するのはなぜですか? 監査を別のクラスに移動できますか?

もしそうなら、このクラスとの共同作業者として監査を導入し、それをモックアウトします。そうでない場合は、単体テストを行います。

部分モックを使用することもできますが、この場合、クラスがやりすぎていることを示していると思います。

于 2010-09-27T22:56:24.100 に答える
1

がプライベート関数の場合auditTheChange、その呼び出しを検証するテストを作成しないだけです。単体テストを実装に密結合させたくありません。

一般的に、プライベート メソッドを単体テストしないでください

于 2020-02-26T17:34:37.887 に答える