2012-02-16 14 views
0

私は単体テストにはほとんど慣れていませんので、間違った方法をとっているかどうか教えてください。Visual Studioユニットテスト:別のテストからデータを取得しますか?

本質的に私は、関連する一連のテストを実行しています。 getAll()save()get(Id)のメソッドが正しく動作しているかどうか確認したいと思います。問題は、save()関数が機能する場合、結果の要素Idをget(Id)メソッドに対して実行されるテストにどのように取得するのか本当にわからないということです。

私は正しい軌道に乗っているのですか、私はユニットテストがどのように機能するのかに関する違反ですか? Visual Studioの単体テストを使用してこれを行うには、どのようなメカニズムが利用できますか?

+0

ベストプラクティスは、すべてのテストメソッドが、テストメソッドが実行される順番であっても、他のテストメソッドとは完全に独立していることです。 – TrueWill

+0

Visual StudioでOrderedTestメカニズムが提供されるのはなぜですか? –

+1

マイクロソフトでは単体テストについてよく理解していないため、良い紹介については、[.NETのサンプルを使ったユニットテストの技術](http://www.manning.com/osherove/)を読んでください。 – TrueWill

答えて

1

次の2つの方法があります。まず、3つの独立したテストを作成して、各機能を個別にテストすることができます。このテスト方法の利点は、何かがうまくいかなくなったときの精度が向上していることです。たとえば、3-testメソッドを使用すると、2/3メソッド(saveやgetAllなど)が動作していて、他のメソッドが動作していないことを示す結果が得られます。

もう1つの方法は、1つのテストで3つのメソッドすべてを実行(テスト)する単一のテストを作成することです。この方法は、失敗した最初のことだけを伝えるだけで、十分な情報である可能性があります。

このシナリオでは、テスト実行中にデータベースに触れることを暗示していますが、これはあまり推奨しません。これが当てはまる場合は、代わりに 'get()を実行すると、次のデータベースアクセスコード(T-SQLなど)が生成されます...'という形式でテストを記述し、実際にはデータベース。

[TestMethod] 
public void TestGetAll() 
{ 
    Assert.areEqual("SELECT * FROM People", People.CreateSQLForGetAll()); 
} 

このユニットテストテクニックの詳細here