运行测试后 AppDomain.CurrentDomain.BaseDirectory 发生变化?

Posted

技术标签:

【中文标题】运行测试后 AppDomain.CurrentDomain.BaseDirectory 发生变化?【英文标题】:AppDomain.CurrentDomain.BaseDirectory changes after running test? 【发布时间】: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”文件。呜呜呜! :( 【参考方案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\\";
    

【讨论】:

以上是关于运行测试后 AppDomain.CurrentDomain.BaseDirectory 发生变化?的主要内容,如果未能解决你的问题,请参考以下文章

所有黄瓜测试后运行

SenTestKit:在所有测试运行后清理?

笑话:等待异步测试完成后再运行下一个测试

想要在 Xcode 中的 UI 测试期间在测试运行后停止调试控制台清除

设置 UI 测试 Xcode 7 后单元测试永远不会运行

运行单元测试时出现语法错误后 PhantomJS 退出