2009-03-25 10 views
4

最近、テスト駆動型開発にますます浸透し、TDDを考えながら書くコードが増えるにつれて、テストの程度について検討しなければならないように思えます私は書くべきです。どのような単位のテストを私自身のプロジェクトのために書くべきかという個人的な方針を設定したいと思っています。ここでテストライティング戦略に関するアドバイス

私は現在直面してい意思決定の例...

私は三つのクラス...

public class User 
{ 
    public string Username { get; set; } 
    public List<Favorite> Favorties { get; set; } 
} 

public class Favorite 
{ 
    public string Username { get; set; } 
    public int rank { get; set; } 
} 

public class UserManager 
{ 
    public List<Favorite> GetTop5(User user) 
    { 
     var qry = from fav in user.Favorties.OrderBy(f => f.rank) 
        select fav; 

     return qry.Take<Favorite>(5).ToList(); 
    } 
} 

を持って、私はのためのI Userクラスのためのデータアクセス層を持っています既に "GetUser"テストの設定があります。ご覧のとおり、私のビジネスロジックには、UserManager.GetTop5()メソッドがあります。このメソッドは、ユーザーがデータベースから取り出した上位5つのお気に入りを返します。このメソッドは非常に単純で、現在は外部リソースや依存関係はありません。

私の質問は、この "GetTop5"ファンクションポイントの別のテストを書きますが、失敗する可能性はほとんどありません。

今後機能を拡張する場合は、テストを設定してください。それとも、ここのテストが過度だと思いますか?

答えて

5

あなたはこれを信じるが、ここではケント・ベックはここStackOverflowの上、言っていたものだしません。

は「私はので、私の哲学は、わずかにテストすることではなく、テストのために、動作するコードのために支払われます(私はこの信頼水準が業界標準に比べて高いと考えていますが、それは単に傲慢であるかもしれません)。私が典型的には間違った種類の間違いをしないとコンストラクタ)、私はそれをテストしていない」

リンク:Link:

+0

これはまさに私がそれを乗り越えていると思うようなものです。上に書いたケースをビジネスの観点から正当化するのはかなり難しいようです。しかし個人的には、それが良い方法かどうかは疑問だ。 –

+0

私自身は単体テストにかなり慣れてきました。しかし、あなたのように、私はあまりにも多くをやっていると思う。来るケントの引用だけで、その感情を高めた。どのようにそれが揺れていくのかわからない...まだそれを考えている。 –

+2

機能のみを直接テストします。機能は他のすべてを間接的にテストします。 –

3

TDDの場合、それぞれフィーチャーの少なくとも1つのユニットテストを作成します。

ですから、GetTop5には機能がありますか?もしそうなら、それはテストに値する。それが機能ではない場合、それは存在する必要はありません;-)

3

後でテストを書いて良い点!最初に関数を実装してからテストすると、関数が奇妙に感じられます。最初にテストを書いてから、その機能を実装する必要があります。さらに、これは、あなたがあなたの関数をどのように使いたいかを考えさせるでしょう。さらに、実装したいものを最初に実装する場合は、コードをテストするのが難しい状況に遭遇します。また、テストの最初のアプローチはこれを助けます。関数の実際の実装前にテストを実装することから始めると、コードはよりテスト可能になります。

3

はい私はその方法のテストも書いています。一般に、実装する機能のテストが必要です。 TDDは、メソッドが動作するかどうかをテストするだけでなく、例外をどのように処理するかをテストする必要があります。たとえば、ユーザーオブジェクトとしてNullを取得した場合の動作をテストする必要があります。

TDDを使用して開発する場合、実際にチームの他のメンバーが使用する必要があるAPIを設計しているので、TDDではAPIの使用方法、つまりその呼び出し方法を記述するだけでなく、エラーが処理されます。より複雑なメソッドについては、独自のカスタム例外を返すことで、何がうまくいかないかを明確にすることができます。

0

を私はほとんどのものをテストします。

私がテストを書くときはいつも、私と他の人が将来読むことができるように、テストを文書化したり、コードをどのように使うべきかについての指示であると考えます。

私は実装をテストしません。テストを変更せずに実装を変更できるようにしたい。

私はたぶん1年か2年の間、TDDを使用してきたので、成熟して止まるでしょう。これまでのところ、私はまだ学習しており、十分なテストを書いていないと思っています。