よろしくお願いします。ユニットテストのasp.netmvcWebアプリケーションを調べ始めたところです。
私はいくつかのコントローラーを持っていますが、それらはすべてBaseControllerから継承しています(このBaseControllerは、メニュー、テナントチェックなどを担当します)。すべてのコントローラーを単体テストして、BaseControllerから継承していることを確認する方法があるかどうかを知りたいと思いました。
よろしくお願いします。ユニットテストのasp.netmvcWebアプリケーションを調べ始めたところです。
私はいくつかのコントローラーを持っていますが、それらはすべてBaseControllerから継承しています(このBaseControllerは、メニュー、テナントチェックなどを担当します)。すべてのコントローラーを単体テストして、BaseControllerから継承していることを確認する方法があるかどうかを知りたいと思いました。
これは、Visual Studio のコード分析機能 (AKA "FxCop") などの静的分析に適しているように思えます。しかし、私は以前にコード分析ルールを書いたことがあります。頭がいっぱいで、髪の毛をすべて抜きたいと思わない限り、それをお勧めするかどうかはわかりません!
単体テストに戻ります。
単体テストでは、コントローラー アセンブリ内のすべてのコントローラーの種類を見つけて、適切な基本クラスがあることを確認するという戦略になります。ここにいくつかの擬似コードがあります:
Type[] allTypes = typeof(SomeTypeInTheAssembly).Assembly.GetExportedTypes();
Type[] allControllerTypes = allTypes.Where(
t => typeof(IController).IsAssignableFrom(t));
Type[] allControllerTypesExceptBaseClass = allControllerTypes.Except(
t => t == typeof(BaseController);
// Assert that all controllers derive from BaseController
Assert.True(allControllerTypesExceptBaseClass.All(
t => typeof(BaseController).IsAssignableFrom(t))