5

私はこの投稿を読んだだけで、テスト駆動開発/設計を開始するときに使用する暗黙のタイピングに反対します。

彼の投稿によると、メソッドの単体テスト時に戻り型に暗黙的な型指定を使用すると、TDDが「遅くなる」可能性があります。また、彼は開発を推進するためにテストで指定されたリターンタイプを望んでいるようです(これは私には理にかなっています)。

暗黙的な型指定を使用した特定の単体テストは、次のようになります。

public void Test_SomeMethod()
{
    MyClass myClass = new MyClass();

    var result = myClass.MethodUnderTest();
    Assert.AreEqual(someCondition, result);
}

だから私の質問は:

暗黙のタイピングを使用すると、TDDの単体テストの作成に役立ちますか?単体テストを作成するときにこの手法を使用して経験を共有できる人はいますか?

すぐにTDDを実行しておらず、リターンタイプが変更される可能性があるジェネリックまたはセミジェネリックの単体テストを作成する方法があるかどうかを知りたいので、これを尋ねます。

4

3 に答える 3

3

彼の主張は理解できますが、ここで使用しないのは正しい理由ではないと思いvarます。TDDは、おおまかに次のように機能することを忘れないでください。

  1. 新しいテストを作成します。
  2. テストがコンパイルに失敗した場合(そして失敗するはずです!)、テストがコンパイルされるまで十分なコードを記述します。
  3. すべてのテストを実行します。
  4. テストが失敗した場合は、すべてのテストに合格するまで十分なコードを記述してください。
  5. リファクタリング。

varテスト対象のメソッドがまだ存在しないため、テストを使用するかどうかに関係なく、どちらの方法でもコンパイルに失敗します。コーディングを開始するとNewMethod、彼のポイントはかなり議論の余地があります。

むしろ、varここで使用しない正しい理由は、コードがタイプが何であるかを示さないためresultです。これは意見の問題ですが、varここでは大丈夫です

var dict = new Dictionary<Foo, List<Bar>>();

匿名タイプの場合はここではありません

var m = M();

Mリターンタイプが何であるかを宣言する(またはIntelliSenseを使用する)ことなくしては完全に不明確だからMです。

于 2010-01-26T16:24:48.487 に答える
1

はいといいえ

現在、Visual Studioでは、特に暗黙的な入力を使用する場合、TDDは少し面倒です。varインテリセンスがないことを意味します。まだ存在していない可能性のあるタイプの名前を入力すると、入力しているものと同様の名前(多くの場合、テストフィクスチャの名前)でオートコンプリートされる傾向があります。

Visual Studio 2010には消費ファーストモードがあり、テスト駆動開発に最適です。escape現在、(2008年以前に)インテリセンスを非表示にするためにヒットする必要があることがわかります。

使用に関しては、var純粋にシナティックシュガーです。それは私の意見では以下をはるかに良くします:

var type = new MyType();

変数タイプがMyTypeタイプであることは明らかです。ジェネリック医薬品に最適で、DRYの原則に従います-Dovar n'tRepeatYourself 。

var type = MethodCall();

var result = ReturnResult();

一方、これにより、TDDに従うかどうかに関係なく、コードが読みにくくなります。優れた単体テストは流れ、読みやすいものでなければなりません。リターンタイプを確認するために、考えるか、メソッドの上にマウスを置く必要がある場合、それは悪い、読みにくいテストの兆候です。

于 2010-01-26T16:31:46.103 に答える
0

ツールの観点からは、変数を避ける方が良いと思います。私はEclipseとJavaを使用していますが、CodeRushやResharperなどの拡張機能が、ここで説明している機能の多くを提供していることを知っています。私のテストで、まだ存在しないメソッドを呼び出すと、それを「迅速に修正」して、目的のクラスにメソッドを作成できます。自動的に作成されたメソッドの戻りタイプは、そのコンテキストによって異なります。文字列を返すことを期待している場合、メソッドの戻り型は文字列になります。しかし、割り当てがvar(Javaにはありませんが)に対するものである場合、IDEは、戻り型をvar(またはObject)以外のものにするのに十分な知識を持っていません。

誰もがTDDでこのようにIDEを使用しているわけではありませんが、非常に役立つと思います。テストでIDEに提供できる情報が多ければ多いほど、テストに合格するために必要な入力が少なくなります。

于 2010-01-26T21:43:30.210 に答える