0

运行单元测试时,无法正确读取配置文件。但是,当从控制台应用程序上下文运行时,会读取配置文件。

在下面的代码中,在赋值后访问var 部分时,运行测试 TestIoCInit() 时为空,从控制台应用程序调用 InitIoC() 时不为空。

    [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

或者,您可以添加一个构建后步骤,将正在测试的项目的 app.config 复制到测试项目的目录中(首先将 app.config 添加到测试项目 - 它将被项目中的 app.config 覆盖正在测试中)。这样,每次构建解决方案时,您都会获得一份复制到测试项目中的最新最好的 app.config 版本。

于 2012-09-09T15:37:20.797 回答
0

您可以使用 ClassInit 将缺少的资源(配置文件、非托管程序集、数据文件)从测试的 source/bin 目录复制到测试结果输出目录。

去做这个:

  1. 从 textContext.DeploymentDirectory 开始,向上遍历目录,直到到达解决方案的目录(使用目录名称,而不是完整路径,因此它可以在其他机器上工作)。

    1.1。如果您没有到达它(如果测试正在构建服务器上运行),则仅上升到比“TestResults”高的一个目录,然后进入子目录“Sources”。

  2. 使用相对于解决方案目录的路径计算测试项目的目录。

  3. 从项目目录或 bin 复制所需资源(如果从 bin 复制,请不要忘记检查配置和平台)。

于 2012-09-09T16:15:14.333 回答
0

您是否尝试在测试项目的 bin 目录中复制配置文件。您应该将其重命名为

Your_test_project_name.dll.config

于 2012-09-09T11:34:02.943 回答
0

我最终添加了一个新的类库项目,并向其中添加了 [TestClass] 属性。无需复制 app.config 文件即可完美运行。谢谢。

于 2012-09-10T06:48:05.383 回答