1

私のレイモジュール:

define(['Util', 'Vector3f'], function (Util, Vector3f) {
  var Ray = {}
  Ray.o = null;
  Ray.d = null;
  Ray.depth = 0;
  Ray.mint = 0.03;
  Ray.maxt = null;
  return Ray;
});

私の単体テスト:

describe(".moveAlong(Number t)", function(){
  it("returns a point at distance t in the direction of the ray", 
  function(){
    expect(4).toBe(null); //unimplemented unit test always fails
  });
});

Ray.o はレイの起源です。Ray.d は光線の方向です。Ray.moveAlong(t) が q = o + d*t となる点 q を返すようにします。

単体テストについての私の理解は、実際に単体テストに Vector3f モジュールを含めて、Ray に原点と方向を与えることができる場合、実際に行っていることは統合テストであるということです。しかし、moveAlong(t) で ray.d + ray.d*t を計算するには、Vector3f モジュールの add() メソッドと mulScalar() メソッドが必要です。

ここで私の Vector3f 依存関係を処理するためのオプションは何ですか? 合理的にスタブ化する方法はわかりませんが、依存関係をスタブ化し、一度に 1 つのメソッドだけをテストすることが単体テストのポイントです。

4

1 に答える 1

1

単体テストのオプション:

最初のオプション:
Ray.o、Ray.d の Vector3f オブジェクトを渡すだけです。

長所:
- 簡単。

短所:
- テストで依存関係を保持します。
- このテスト対象外のコンポーネント (Vector3f) を更新するには、このテストの更新が必要になる場合があります。

2 番目のオプション:
スタブ Vector3fs を作成し、それぞれが Vector3f モジュールの add(Vector3f v)、mulScalar(Number t) メソッドのみを実装します。参照は型がなく、適切なメソッドを持つオブジェクトは「適切な」オブジェクトの代わりになる可能性があるため、これは Javascript では非常に簡単です。このプロジェクトにOOPを押し付けようとするのは悪い考えだと思いますが、これにどのようにアプローチするかは本当にわかりません。それは別の質問のトピックです。

長所:
- テスト コードで Ray と Vector3f の間の依存関係を壊すため、Vector3f をさらに変更しても、Ray のユニット テストが失敗することはありません。

短所:
- テストのコードが増えます。
- Vector3f がすべての単体テストに合格するように変更されているが、Ray の機能が壊れている場合、Vector3f への依存関係が壊れているため、Ray の単体テストにも表示されません。

最後の詐欺が問題であるかどうかはわかりません.Vector3fがすべての単体テストに合格している場合、システムの他のコンポーネントとの契約に従っているため、Vector3fのテストがすべて合格する状況は見られませんが、他の部品の破損の原因になります。さらに、これは統合レベルの問題であり、ユニット レベルの問題ではありません。

2番目のオプションが進むべき道だと思います。

于 2012-09-15T19:23:54.733 に答える