带有NUnit GUI的Environment.CurrentDirectory与TeamCity值不同,如何同步它们?

带有NUnit GUI的Environment.CurrentDirectory与TeamCity值不同,如何同步它们?,nunit,teamcity,Nunit,Teamcity,如上所述,我有一些使用相对文件路径中的文件的集成测试。以下是文件结构,有助于对其进行描述: /Dependencies /VideoTests/bin/release/video.dll /SearchTests/bin/release/search.dll /OtherProjects GUI从根目录运行测试,但是当TeamCity运行测试时,它从每个测试DLL bin目录运行测试。现在我不介意哪一个我可以跟随另一个,但我确实需要它们是相同的,否则我的相对路径将无法工作 有什么想法吗 注意:

如上所述,我有一些使用相对文件路径中的文件的集成测试。以下是文件结构,有助于对其进行描述:

/Dependencies
/VideoTests/bin/release/video.dll
/SearchTests/bin/release/search.dll
/OtherProjects
GUI从根目录运行测试,但是当TeamCity运行测试时,它从每个测试DLL bin目录运行测试。现在我不介意哪一个我可以跟随另一个,但我确实需要它们是相同的,否则我的相对路径将无法工作

有什么想法吗


注意:使用TeamCity 5.0和NUnit 2.5。

启动应用程序时,您是否确保TeamCity和NUnit使用相同的工作目录


如果没有,您可以在测试代码中调整当前目录。

您可能不想依赖它。我建议您阅读文档,但您需要了解的要点是,CurrentDirectory是.exe的起始位置:它可以是系统中的任何路径。例如,假设您的用户将您的.exe(或使用DLL的任何.exe)添加到其路径中。然后他们可以导航到c:\foo\bar并从那里启动.exe,这将把CurrentDirectory设置为“c:\foo\bar”,而您可能无法处理这个问题


我认为您最好重新编写您正在执行的任何操作,这样您就不会依赖于CurrentDirectory。现在依赖CurrentDirectory会遇到什么问题?

我正在尝试获取Dependencies文件夹中文件的相对路径。我唯一的方法(不添加我绝对不想要的完整路径)是使用CurrentDirectory。如果您打算使用CurrentDirectory,那么您对Dependencies文件夹的查找将在生产中出现错误。我会调查Assembly.getExecutionGassembly().LocationAh好的,我想我可以让它工作。我会尝试一下,然后再给你回复。嗯,我试着寻找这样一个环境,但我运气不太好。TeamCity似乎从程序集的位置运行测试,我找不到覆盖此设置的设置。NUnit似乎是从打开GUI的路径运行的,我似乎找不到一个设置来告诉它从assembly文件夹运行测试。我只是缺少一个很小的设置。你不能在每个测试的安装阶段设置Environment.CurrentDirectory吗?这就是为什么我首先需要当前目录,因为我不知道DLL在文件树中的位置。上面提到的程序集位置对我来说就像是一张罚单,因为它总是给我执行的程序集的路径。然后我会使用popester的建议来使用Assembly.getExecutionGassembly().location。我使用相同的方法为我开发的程序加载插件