2012-04-07 12 views
2

mockingを使用せずにテストプロジェクトからビューをテストするにはどうすればよいですか?私はあらゆる種類のものを試しました。 MarshalByRefObject経由でASP .NETアプリケーションホストを作成し、そのViewToStringメソッドを使用します。また、ViewPageオブジェクトを動的にインスタンス化しようとしました。テストプロジェクトのビューを嘲笑せずにテストしますか?

Test method Fablelane.WebApplication.Tests.UseCases.CreateNewSchoolAsAdministrator threw exception: 
System.NullReferenceException: Object reference not set to an instance of an object. 
at System.Web.VirtualPath.GetCacheKey() 
at System.Web.Compilation.BuildManager.GetCacheKeyFromVirtualPath(VirtualPath virtualPath, ref Boolean keyFromVPP) 
at System.Web.Compilation.BuildManager.GetVPathBuildResultFromCacheInternal(VirtualPath virtualPath, Boolean ensureIsUpToDate) 
at System.Web.Compilation.BuildManager.GetVPathBuildResultInternal(VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) 
at System.Web.Compilation.BuildManager.GetVPathBuildResultWithNoAssert(HttpContext context, VirtualPath virtualPath, Boolean noBuild, Boolean allowCrossApp, Boolean allowBuildInPrecompile, Boolean throwIfNotFound, Boolean ensureIsUpToDate) 
at System.Web.Compilation.BuildManager.GetVirtualPathObjectFactory(VirtualPath virtualPath, HttpContext context, Boolean allowCrossApp, Boolean throwIfNotFound) 
at System.Web.Compilation.BuildManager.GetObjectFactory(String virtualPath, Boolean throwIfNotFound) 
at System.Web.Mvc.BuildManagerWrapper.System.Web.Mvc.IBuildManager.FileExists(String virtualPath) 
at System.Web.Mvc.BuildManagerViewEngine.FileExists(ControllerContext controllerContext, String virtualPath) 
at System.Web.Mvc.VirtualPathProviderViewEngine.GetPathFromGeneralName(ControllerContext controllerContext, List`1 locations, String name, String controllerName, String areaName, String cacheKey, String[]& searchedLocations) 
at System.Web.Mvc.VirtualPathProviderViewEngine.GetPath(ControllerContext controllerContext, String[] locations, String[] areaLocations, String locationsPropertyName, String name, String controllerName, String cacheKeyPrefix, Boolean useCache, String[]& searchedLocations) 
at System.Web.Mvc.VirtualPathProviderViewEngine.FindView(ControllerContext controllerContext, String viewName, String masterName, Boolean useCache) 
at System.Web.Mvc.ViewEngineCollection.<>c__DisplayClassc.<FindView>b__b(IViewEngine e) 
at System.Web.Mvc.ViewEngineCollection.Find(Func`2 lookup, Boolean trackSearchedPaths) 
at System.Web.Mvc.ViewEngineCollection.Find(Func`2 cacheLocator, Func`2 locator) 
at System.Web.Mvc.ViewEngineCollection.FindView(ControllerContext controllerContext, String viewName, String masterName) 
at Fablelane.WebApplication.Tests.Extensions.ControllerExtensions.RenderPartialToString(ControllerBase controller, String partialName, Object model, RouteData routeData) in ControllerExtensions.cs: line 28 
at Fablelane.WebApplication.Tests.UseCases.InvokeView(Controller controller, ViewResult result) in UseCases.cs: line 104 
at Fablelane.WebApplication.Tests.UseCases.CreateNewSchoolAsAdministrator() in UseCases.cs: line 226 

このエラーは、インスタンス化メソッドを使用しているときに発生します。

アプリケーションホストソリューションを実行しようとすると、プロパティのシリアル化ができないというシリアル化例外が発生して失敗します。

私は立ち往生しています - 何をすべきですか?

答えて

1

あなたのビューはUIレイヤーにあり、UIレイヤーを単体テストするだけで、サービスレイヤーからコントローラー/ビューが使用しているものすべてをモックします。

ユースケース(機能)が正しく実装されていることをテストチームがテストするため、UIレイヤは統合テストを必要としません。

通常、ビジネスロジックは別のレイヤー、たとえばサービスレイヤーにあります。 ここでは、サービスとデータレイヤの間で最も一般的な統合テストが見つかります。

環境問題を回避しようとするのではなく、何が効いているのですか?ユニットレイヤーとユニットのユニットテストとサービスレイヤーの統合テスト。

さらに、ブラウザの自動テストでは、Seleniumなどを使用できます。

+0

私はテストチームを持っていません。私たちは現時点でこれに取り組んでいる2人のような人です。 –

+0

それでも、すべての機能を追加したことを確認するには、Webサイトを実行する必要があります。それは、ページが読み込まれない場合に気付く場所です。あなたが2のチームであれば、統合テストを書く必要はありませんが、あなたがそれらを書くことに決めたら、あなたが追加した機能を検証することによってUIがすでにテストされているので、サービス層だけを書きます。 – Nope

+0

私はページの読み込みを心配していません。ページで何か特別なことをすると、最初に見つかったエラーが頻繁に発生します。このようなエラーが発生するたびに、私はそのテストをプログラムします。 –

関連する問題