5

私は自分のオープン ソース プロジェクトの 1 つについて、緩やかな TDD ワークフローに従おうとしています。これは、他のプログラマーが使用するための API です。

そのため、API を「機能させる」だけでなく、その使用方法を設計することも重要な側面の 1 つです。コンパイルする前にテストを書くのは時間の無駄であり、API が安定するまで何度も書き直す傾向があると言う人もいます。また、次のようなワークフローに従う必要があると聞いたことがあります。

  1. コンパイルできないテストを書く
  2. コンパイルさせる
  3. 緑にしろ

私はこのワークフローに従おうとしてきましたが、最終的には奇妙なことがいくつかあります。たとえば、私の API には次の 2 つのメソッドがあります。

Handles(string pattern); //had this one already
Handles(IPatternMatcher pattern); //needed this one

メソッドの 2 番目の形式を API に追加する必要がありました。だから、私は次のような単純なテストで終わった:

public void Handles_SupportsIPatternMatcher()
{
  var api=new MyAPI();
  api.Handles(new TestPatternMatcher());
}

実装された後、これは無駄のように思えます。

このワークフローに従うべきですか、それとも改善する方法はありますか? 基本的にコンパイラ エラーをチェックするだけのテストを作成しないようにするにはどうすればよいですか? これは公に使用可能な API であるため、このようなテストについて心配する必要がありますか?

4

2 に答える 2

3

いいえ。

コンパイラが動作しているかどうかをテストするコードを記述しないでください。これらの種類のテストは、動的言語 (または静的言語の動的機能) を使用している場合、非常に理にかなっています。実際に、何かを忘れていたり、失敗したユニット テストに何かをリファクタリングしたりしたことがわかります。

単体テストの実行のポイントは、エラーが発生した場合にビルドを失敗させることです。コードにコンパイラ エラーがある場合、ビルドは既に失敗しています。後から推測する必要はありません。

于 2013-02-15T07:54:04.233 に答える
1

resharperを使用すると、IPatternMatcherを取得する空のHandlesメソッドを作成できます。TDDは強力なものであり、試してみる必要があります。私はコードの前にテストする方法とコードの後に​​テストする方法の両方を試していましたが、コードの前にテストすることは強力なことであることがわかりました。コードエラーは非常に厄介にデバッグできます。また、テストは、コードが期待どおりに機能することを保証するものです。

于 2013-02-15T05:23:16.767 に答える