1

クラスAのインスタンスを含むクラスとB、の状態を更新する呼び出し関数fooの関数があります。コード例(Javascript)は次のとおりです。AsetBB

A = function () {
    this.init = function (b) {
        this.b = b
    }

    this.foo = function (val) {
        this.b.set(val)
    }

    this.bar = function () {
        return this.b.get()
    }

}

B = function () {
    this.set = function (val) {
        this.v = val
    }

    this.get = function () {
        return this.v
    }
}

(モックやスタブなどを使用して)実装に依存しないfooようにテストを維持しながら、関数を単体テストするにはどうすればよいですか?AB

4

2 に答える 2

3

Aモックを使用すると、 のモックを渡すだけで、 が適切な値で呼び出されたBことを確認できます。setモック フレームワークがない場合は、JavaScript でオブジェクトを簡単に作成できます。

b = {  
       setCalled: false,
       expectedValue: <expected>
       set: function(val) {
         <check that val == this.expectedValue>
          this.setCalled = true;
       }
     }

セットアップしたテストで、指定されたthen 呼び出しでbを作成し、それがに変更されたことを確認します。同様に get メソッドをto check に追加できます。AbA.foob.setCalledtruebA.bar

この場合、Feature Envyの匂いもチェックする必要があります。2 つのクラスがこのように密結合している場合は、何かを間違って使用していないことを確認する必要があります。実際の例では問題ないかもしれませんが、チェックする価値があります。

于 2010-06-28T22:22:04.937 に答える
0

Aのテストがその実装に依存しないことを確認しながら、これを行うための最良の方法を見つけました。これは、動作するgetandを持ちset、一時変数に書き込むモックBを作成することです。

Aをテストするためのコード例:

// Mock B
b = new function () {
    this.set = function (val) {
        this.v = val
    }

    this.get = function () {
        return this.v
    }
}

// Create an instance of A with Mock B
a = new A().init(b)

// Test A

// ...
于 2010-07-12T04:52:13.990 に答える