質問
わかりました - 私はナンシーフルが大好きです。その数行でウェブアプリケーションを書くのは素晴らしいことです!
しかし、ユニットレベルでナンシーモジュールをどのようにテストしますか?
私が知っていることに注意してください 優れたテストフレームワーク ナンシー(Nancy.Testing on Nuget)が付属しているため、(ほぼ)アプリケーションスタック全体をテストする優れた方法が提供されます。しかし今、私はそれを意味します 単位 レベルテストは、TDDファッションでナンシーモジュールの内容を具体化するために使用します。
ルートはコンストラクターで定義されているため、多くの場合、アクション全体を構成するラムダの表現と一緒に定義されているため、単体テストから少し「到達できない」と感じます。しかし、ルートのアクションをテストする方法について明白なものを見逃しましたか?
たとえば、この単純なアプリケーションの単体テストはどのように見えますか?
public class ResouceModule : NancyModule
{
private IProductRepository _productRepo;
public ResourceModule(IProductRepository repo) : base("/products")
{
Get["/list"] = parameters => {
return View["productList.cshtml", repo.GetAllProducts()];
};
}
}
そこを参照してください - 今私はテストの前に制作コードを書きました... :)テストの開始方法に関する提案はありますか?
解決
私たちが提供するテストツールを使用して、最初にテスト開発することができます。
- テストスタートアップでは、テスト中のモジュールと必要な偽のオブジェクトのみを含むブートストラッパーを構成します。
- テストでは、特定のルート(Get /Listなど)を実行します。これに繰り返しコードを削除するための小さなヘルパーが必要になる場合があります。
- 戻ってくるものを主張します - リクエストと応答オブジェクト(ヘッダー、Cookieなど)、HTMLボディのヘルパー、および1.8に来て、JSON、XML、およびボディの弦の応答を手に入れるためのヘルパーになります。
- 次のルートに移動し、すすぎ、繰り返します。
わかりました、だからあなたはそうではありません ただ モジュールをテストしますが、コールスタックを見ると、ルートにヒットする前または後にあまり起こっていないので、私の本の中でそれほど大したことではありません:-)モジュールを完全にテストしたい場合分離して、自分で構築して、それに応じて個々のルートを突くことができます(モジュールの辞書だけです)。
他のヒント
Nancy.Testingの一部として、設定可能なBootsRapperを使用して、IOCセットアップを含むセットアップを制御できます。これにより、より低いレベルの依存関係なしでモジュールをテストし、TDDを有効にすることができます。