无法读取测试项目中的配置文件

时间:2012-09-09 11:30:26

标签: c# unit-testing app-config

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

在下面的代码中,在分配后访问 var section 时,在运行测试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 个答案:

答案 0 :(得分:0)

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

  

Your_test_project_name.dll.config

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

要做到这一点:

  1. 从textContext.DeploymentDirectory开始并上到目录,直到到达解决方案的目录(使用目录名,而不是完整路径,因此它可以在其他计算机上运行)。

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

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

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

答案 3 :(得分:0)

我最终添加了一个新的类库项目,并为其添加了[TestClass]属性。 它完美地工作,无需复制app.config文件。 感谢。