运行测试后 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 文件。示例我们在 VS 2017 中遇到了这个问题,但包括单个测试在内的所有测试都是从 TestResults 文件夹运行的。我们的问题是 log4net.config 没有被复制到 TestResults 文件夹(即使 Copy Always 是真的)。
我们的解决方案是从解决方案项目文件夹(直接在解决方案下)删除 LocalTestRun.testrunconfig 文件。当我们这样做时,它开始使用 \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 发生变化?的主要内容,如果未能解决你的问题,请参考以下文章