2012-04-27 9 views
2
  • は私が私が私が追加visulaスタジオ2010拡張
  • を使用してNUnitのテストプロジェクトを作成し、簡単なAsp.net MVC 4アプリケーション
  • を作成いくつかのコントローラー(モデルとビューを持つ)とウェブサイトが正常に動作します。これはSQL Server CEで動作します

コントローラをテストする必要があります。NUnitの、Asp.net MVC 4は、SQL Server CE 4、エラープロバイダ

SkateboardShop.Tests.Controllers.BrandControllerTest.TestDetailsView: System.Data.ProviderIncompatibleException : An error occurred while getting provider information from the database. This can be caused by Entity Framework using an incorrect connection string. Check the inner exceptions for details and ensure that the connection string is correct. ----> System.Data.ProviderIncompatibleException : The provider did not return a ProviderManifestToken string. ----> System.Data.SqlClient.SqlException : A network-related or instance-specific error occurred while establishing a connection to SQL Server. The server was not found or was not accessible. Verify that the instance name is correct and that SQL Server is configured to allow remote connections. (provider: SQL Network Interfaces, error: 26 - Error Locating Server/Instance Specified)

確かに、テストプロジェクトは、データプロバイダ情報を取得する:私はこのテストNUnitのは私にこのエラーを返す実行すると

namespace SkateboardShop.Tests.Controllers 
{ 
    [TestFixture] 
    class BrandControllerTest 
    { 

     [Test] 
     public void TestDetailsView() 
     { 

      var controller = new BrandController(); 
      var result = controller.Details(2) as ViewResult; 
      Assert.AreEqual("Details", result.ViewName); 

     } 

    } 
} 

:私はこの単純なクラスを書きましたの?

<connectionStrings> 
    <add name="SkateboardEntities" connectionString="Data Source=d:\Basic\project\asp\SkateboardShop\SkateboardShop\App_Data\SkateboardShop.sdf" providerName="System.Data.SqlServerCe.4.0" /> 
    </connectionStrings> 

しかし、何もする: は、私は(テストプロジェクトの)app.configファイルには、このような接続文字列を追加します。 私はMVCとNUnitで新しくなったので、ユニットテストが実際のデータベースデータをテストし、それが良い方法であれば、それをどうやって行うべきかを最初に尋ねています。

ありがとうございました。

+0

これらの統合テストはありますか?もしそうなら、あなたのテストプロジェクトにasp.net appに似た設定ファイルが入っていますか?統合テストではない場合は、パーシスタンス層の依存性を注入できませんでした。 – Tejs

答えて

0

私の意見では、テストのためのモックリポジトリ/パーシスタンス層が必要です。 このようにすれば、予測テストの結果を&に対してテストするように設定できます。

この例では、あなたのコントローラのようなコードで、リポジトリのインスタンスを受け入れることができます:あなたはユニットテスト

ためIBrandRepositoryを注入するために、任意のDI +モックフレームワークを使用することができます

public class BrandController{ 
public BrandController(IBrandRepository repository){...} 
} 

しかし、模擬が十分でない状況がある&あなたはテストのために物理的なデータベースが必要です。

このような場合、同じ構造のテストデータベースを持つことをお勧めしますが、ユニットテストのために必要に応じて再シード/初期化できるテストデータが必要です。この場合は、あなたが戻って元の状態にデータベースを初期化するためのテスト&のためのテスト・データベースにスクリプトまたはDbInitializerのいくつかの並べ替えをお使いの設定ファイルを指すことができ

など

HTH。

+0

例が必要な場合は、ここでアプリケーションの再構築方法を知るプロジェクトを見つけました:http://efmvc.codeplex.com/ –