【问题标题】:AppDomain.CurrentDomain.BaseDirectory changes after running test?运行测试后 AppDomain.CurrentDomain.BaseDirectory 发生变化?
【发布时间】:2013-11-04 09:03:52
【问题描述】:

在 VS2012 中,我有一堆(MS)单元测试,它们使用不同的 xml/text 文件,我存储在与测试文件类相同的文件夹中。

我使用 File.OpenRead(AppDomain.CurrentDomain.BaseDirectory + "file") 打开这些文件

如果我只运行一个测试,它会起作用,文件会被读取。

如果我一次运行所有测试,BaseDirectory 会返回不同的路径(在 TestResults/Deploy/currentdatetime/Out 中)并且显然无法在此处找到文件。

怎么办?

谢谢!

【问题讨论】:

  • 为每个测试尝试 [[DeploymentItem(@"your relative file path")]][1] 属性。另外我认为您需要将所有文件添加到项目中并将它们的属性设置为 CopyToOutputDirectory 设置为“CopyAlways”。 msdn.microsoft.com/en-us/library/…
  • 1.没用 :( 2. 已经这样做了,它们被复制了,基目录的路径在一次运行多个测试时会发生变化。
  • 你用 DeploymentItem 属性装饰了什么?测试类还是测试方法?
  • 我遇到了同样的问题。我在不同的文件中有我的 .config 文件。示例 。我在 MySectionName.SeparateFile.config 文件上有“始终复制”。如果我一次运行一个测试,一切都很好。我在“测试资源管理器”中单击“全部运行”,我得到一个 ConfigurationErrorsException 异常,因为它正在“TestResults/Deploy/currentdatetime/Out”目录中查找“MySectionName.SeparateFile.config”文件。呜呜呜! :(

标签: c# .net unit-testing mstest appdomain


【解决方案1】:

我们在 VS 2017 中遇到了这个问题,但包括单个测试在内的所有测试都是从 TestResults 文件夹运行的。我们的问题是 log4net.config 没有被复制到 TestResults 文件夹(即使 Copy Always 是真的)。

我们的解决方案是从解决方案项目文件夹(直接在解决方案下)删除 LocalTestRun.testrunco​​nfig 文件。当我们这样做时,它开始使用 \bin\debug\ 文件夹并找到我们的 log4net.config 文件。

【讨论】:

    【解决方案2】:

    好吧,它没有成功,而且谷歌似乎认为它永远不会成功。

    解决方法是简单地编辑路径,如:

        [ClassInitialize]
        public static void ClassInitialize(TestContext context)
        {
            string deployDir = AppDomain.CurrentDomain.BaseDirectory;
            string[] rows = deployDir.Split(new string[] { "TestResults" }, StringSplitOptions.None);
            string projectPath = rows[0].ToString();
            _path = projectPath + "newpath\\";
        }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-11-14
      • 1970-01-01
      • 1970-01-01
      • 2013-02-16
      • 1970-01-01
      • 1970-01-01
      • 2017-10-02
      • 2014-08-22
      相关资源
      最近更新 更多