0

単体テストを実行すると、構成ファイルが正しく読み取られません。ただし、コンソールアプリケーションコンテキストから実行する場合は、構成ファイルが読み取られます。

以下のコードでは、割り当て後にvarセクションにアクセスすると、テストTestIoCInit()を実行するとnullになり、コンソールアプリケーションからInitIoC()を呼び出すとnullになりません。

    [TestMethod]
    public void TestIocInit()
    {
        InitIoC();
    }
    internal static void InitIoC()
    {
        IUnityContainer unityContainer = new UnityContainer(); // the host app domain creates the unity container and pass it to the resolver, the resolver is a static member of IoC class, thus the container is static

        ServiceLocator.SetLocatorProvider(unityContainer);

        var section = (UnityConfigurationSection)ConfigurationManager.GetSection("unity");
        section.Configure(unityContainer);

        var unityResolver = new UnityDependencyResolver(unityContainer);
        IoC.Initialize(unityResolver);
        new IoCTypeRegistrationTask(unityContainer).Execute();
    }

あなたの助けに感謝!

4

4 に答える 4

0

テストプロジェクトのbinディレクトリにある設定ファイルをコピーしてみましたか。名前をに変更する必要があります

Your_test_project_name.dll.config

于 2012-09-09T11:34:02.943 に答える
0

または、ビルド後の手順を追加して、テスト対象のプロジェクトのapp.configをテストプロジェクトのディレクトリにコピーすることもできます(最初にapp.configをテストプロジェクトに追加します。プロジェクトのapp.configで上書きされます)。テスト中)。このようにして、ソリューションをビルドするたびに、テストプロジェクトにコピーされた最新かつ最高のapp.configバージョンのコピーを取得します。

于 2012-09-09T15:37:20.797 に答える
0

ClassInitを使用して、不足しているリソース(構成ファイル、アンマネージアセンブリ、データファイル)をテストのsource/binディレクトリからテスト結果の出力ディレクトリにコピーできます。

これをする:

  1. textContext.DeploymentDirectoryから開始し、ソリューションのディレクトリに到達するまでディレクトリを上に移動します(フルパスではなくディレクトリ名を使用するため、他のマシンで機能します)。

    1.1。到達しない場合(テストがビルドサーバーで実行されている場合)、「TestResults」より1つ上のディレクトリに移動し、次にサブディレクトリ「Sources」に移動します。

  2. ソリューションのディレクトリからの相対パスを使用して、テストプロジェクトのディレクトリを計算します。

  3. プロジェクトのディレクトリまたはbinから必要なリソースをコピーします(binからコピーする場合は、構成とプラットフォームを確認することを忘れないでください)。

于 2012-09-09T16:15:14.333 に答える
0

最終的に、新しいクラスライブラリプロジェクトを追加し、それに[TestClass]属性を追加しました。app.configファイルをコピーしなくても完全に機能しました。ありがとう。

于 2012-09-10T06:48:05.383 に答える