2

ユニットテストは初めてです。asp.net mvc3とs#arpliteを使用するWebアプリケーションがあります。このアプリケーションに単体テストを追加したいと思います。これまでのところ、コントローラークラスの各アクションのテストがあります。興味がありますが、他に何をテストする必要がありますか?ビューもテストする必要がありますか?

別の質問ですが、私がオンラインで見つけたすべてのテスト例は、moqまたは他のツールを使用して偽のデータを作成しています。また、実際のデータベースを再度テストする必要がありますか?

4

5 に答える 5

5

ビューを単体テストしたり、実際のデータベースに対して実行したりしないでください。コントローラーアクション、アクションフィルター、HTMLヘルパー、モデル、C#で記述されたものなど、コードレベルのアーティファクトに単体テストを使用します。

実際のデータベースとビューをテストするには、統合テストを参照してください。統合テストは単体テストとは異なりますが、nunitのような単体テストフレームワークを使用して実行できます。基本的には、SeleniumWebDriverやWatinなどを使用してブラウザーを駆動するためのテストコードを作成するだけです。ただし、これらは実際には単体テストではなく、統合テスト、エンドツーエンドテスト、またはユーザー受け入れテストです。

于 2012-05-02T19:20:30.203 に答える
4

「退屈するまでテストする」

そうは言っても、統合テストを介してほとんどのテストを実行することには注意してください。つまり、一度に1つのことをテストします。例えば。あなたはテストに興味があるかもしれません

  • コントローラロジック
  • ルーティングロジック
  • データベース
  • 読み込み方法
  • ビュー

ただし、同じテストで2つ以上をテストしないでください。したがって、コントローラーロジックをテストする場合は、使用されているデータオブジェクトを渡すか、モックアウトしてください。

そうは言っても、これらのパーツをテストする「方法」にも興味があるかもしれません。以下の3つの部分(データベース、読み込み関数、ビュー)について説明します。

データベース

データベースでテストする必要があるのは、実際には2つだけです。

  1. 接続されていますか?
  2. スキーマは正しいですか

接続の場合、エコーテストが好きです

Assert.AreEqual(42, QuerySingleResult("Select 42"));

データベースのメタデータをテストする方法はたくさんありますが、保存されているバージョン番号がある場合は、それをテストするだけで済みます。これにより、パスのアップグレードも簡単になります。

Assert.AreEqual(6, QuerySingleResult("Select version From Schema"));

読み込み機能

読み込み関数をテストする方法はたくさんありますが(ここでは簡単な方法を示します)、それらはすべて、読み込みを関数に分離することに依存しています。

linqをテストしています...

var people = From db in new EntityFrameworkContext().People Where ...... Select ....

これを2つの機能に分割すると

IEnumerable<People> LoadPeople()
{
 return LoadPeople( new EntityFrameworkContext().People);
}
IEnumerable<People> LoadPeople(IEnumerable<People> fromPeople)
{
 return From db in fromPeople Where ...... Select ....

}

これで簡単にテストできます。

ビュー

ビューは簡単にテストできますが、詳細はたくさんあります。すべてのビデオを紹介します:http ://www.youtube.com/watch?v = SttlPzwJw3U

しかし、2つの重要な部分は

1)テスト

MvcApprovals.VerifyMvcPage(new YourController().YourTestAction

2)コントローラーのテストシーム

public ActionResult YourTestAction()
{
  // setup your model
  return View("viewpage", model);
}

ハッピーテスト!

于 2012-05-10T14:13:11.123 に答える
2

バグが含まれている可能性のあるものをすべてテストします。ビューのテストはやや難しいですが、それは悪い考えではありません。詳細を探している場合は、カスタム属性、イベント、静的メソッド、拡張メソッド、およびその他のユーティリティをテストしてください。

データベースに対してテストする場合は、それがテスト専用のデータベースであることを確認してください。多くのORMは、データベースをモックする方法も提供します。

私は個人的にAyehde(www.ayende.com)製品のファンであり、モックフレームワークとデータベースとしてそれぞれRhino.MocksとRavenDBを使用しています。

于 2012-05-02T19:22:58.083 に答える
1

ビューにロジックがない場合は、おそらくそれらを単体テストする必要はありません。Seleniumなどを使用した重要な基本シナリオをカバーするいくつかのエンドツーエンドテストで単体テストを補足することをお勧めします。

はい、単体テストと一緒にデータベースにアクセスする統合テストが必要です。

于 2012-05-02T19:17:51.250 に答える
1

定義上、フレームワークコードではなくコードをテストしているため、単体テストの対象を指定することはできません。そして、私たちはあなたのコードが何をするのかわかりません。あなただけがします。

フレームワークコードの単体テストには意味がありません。すでにテストされています。あなたはあなたの論理をカバーするテストを書くことに集中する必要があります。

于 2012-05-02T19:23:21.870 に答える