2
  • シンプルな Asp.net MVC 4 アプリケーションを作成しました
  • visula studio 2010 拡張機能を使用して NUnit テスト プロジェクトを作成しました
  • いくつかのコントローラー (モデルとビューを含む) を追加すると、Web サイトは正常に動作します。Sql Server CEで動作します

次に、コントローラーをテストする必要があります。私はこの単純なクラスを書きました:

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);

        }

    }
}

このテストを実行すると、NUnit から次のエラーが返されます。

SkateboardShop.Tests.Controllers.BrandControllerTest.TestDetailsView: System.Data.ProviderIncompatibleException : データベースからプロバイダー情報を取得中にエラーが発生しました。これは、不適切な接続文字列を使用する Entity Framework が原因である可能性があります。内部例外で詳細を確認し、接続文字列が正しいことを確認してください。----> System.Data.ProviderIncompatibleException : プロバイダーが ProviderManifestToken 文字列を返しませんでした。----> System.Data.SqlClient.SqlException : SQL Server への接続の確立中に、ネットワーク関連またはインスタンス固有のエラーが発生しました。サーバーが見つからないか、アクセスできませんでした。インスタンス名が正しいこと、および SQL Server がリモート接続を許可するように構成されていることを確認してください。(プロバイダー: SQL ネットワーク インターフェイス、エラー:

確かに、テスト プロジェクトはどこでデータ プロバイダー情報を取得しますか? (テスト プロジェクトの) app.config ファイルに、次のような接続文字列を追加します。

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

しかし、何もすることはありません。私は MVC と NUnit を初めて使用するので、最初に、単体テストで実際のデータベース データをテストする必要があるかどうか、またそれが良い方法である場合は、その方法を尋ねています。

ありがとう。

4

1 に答える 1

0

私の意見では、テスト用のモック リポジトリ/永続層を用意する必要があります。そのようにして、予測可能な結果セットを処理してテストを書き込むことができます。

この例として、次のようなコードを含むリポジトリのインスタンスを受け入れるコントローラーが考えられます。

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

任意の DI + Mock フレームワークを使用して、単体テスト用に IBrandRepository を挿入できます

ただし、モックでは不十分で、テスト用の物理データベースが必要な場合があります。

このような場合、同じ構造を持つテスト データベースを用意することをお勧めしますが、単体テストの必要に応じて再シード/初期化できるテスト データを使用します。

この場合、構成ファイルをテスト用のテストデータベースにポイントし、データベースを初期化して元の状態に戻すための何らかのスクリプトまたは DbInitializer などを指定できます。

HTH。

于 2012-04-27T16:01:46.103 に答える