4

そのため、最近はテスト駆動開発に夢中になっており、tdd を考えながらコードを書くほど、書くべきテストの範囲について決定を下さなければならないように思えます。自分のプロジェクトでどのくらい単体テストを書くべきかについて個人的なポリシーを設定したいと思います.皆さんがどのようなアプローチを取っているかについてアドバイスをいただけないでしょうか.

これが私が現在直面している決定の例です...

私は3クラス...

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();
    }
}

「GetUser」テスト セットアップが既にある User クラスのデータ アクセス レイヤーがあります。ご覧のとおり、ビジネス ロジックには UserManager.GetTop5() メソッドがあり、DB から取り出したばかりのユーザーの上位 5 つのお気に入りを返します。この方法は非常に単純で、現在、外部リソースや依存関係はありません。

それで私の質問は、失敗する可能性はほとんどありませんが、この「GetTop5」関数ポイントの別のテストを作成していただけないでしょうか?

将来的に機能を拡張する場合に備えて、とにかくテストをセットアップしますか? それとも、ここでのテストは過剰だと思いますか?

4

5 に答える 5

5

信じられないかもしれませんが、Kent Beck の StackOverflow での発言は次のとおりです。

「私はテストに対してではなく、機能するコードに対して報酬を受け取るので、私の哲学は、一定レベルの信頼に達するために可能な限りテストを行わないことです (このレベルの信頼は業界標準に比べて高いと思いますが、それはただの傲慢かもしれません。 . 通常、ある種の間違い (コンストラクターで間違った変数を設定するなど) をしない場合は、それをテストしません。"

リンク:リンク:

于 2009-03-26T00:03:46.987 に答える
3

TDD を行うときは、機能ごとに少なくとも 1 つの単体テストを作成します。

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

于 2009-03-25T23:57:25.440 に答える
3

後でテストを書くのは良い点です!最初に関数を実装してからテストすると、奇妙に感じます。そのため、最初にテストを作成してから関数を実装する必要があります。さらに、これにより、関数をどのように使用するかを考える必要があります。さらに、実装したいものを最初に実装すると、とにかくコードをテストするのが難しい状況に陥ります。繰り返しになりますが、テスト ファーストのアプローチはこれに役立ちます。関数を実際に実装する前にテストの実装を開始すると、コードはよりテストしやすくなります。

于 2009-03-25T23:59:01.787 に答える
3

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

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

于 2009-03-26T00:02:46.007 に答える
0

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

私がテストを書くときはいつでも、テストは自分のコードをどのように使用すべきかについてのドキュメントまたは指示であり、私や他の人が将来読むべきものであると考えています。

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

私は TDD を 1 年か 2 年使ってきたので、成熟してやめることができるかもしれません。しかし、これまでのところ、私はまだ学習中であり、十分なテストを書いていないと思います。

于 2013-03-26T09:53:24.353 に答える