【问题标题】:Environment.CurrentDirectory with NUnit GUI differs to the TeamCity value, how can I sync them?带有 NUnit GUI 的 Environment.CurrentDirectory 与 TeamCity 值不同,如何同步它们?
【发布时间】:2009-12-11 14:57:18
【问题描述】:

如上所述,我有一些使用来自相对文件路径的文件的集成测试。为了帮助描绘它,这里是文件结构:

/Dependencies
/VideoTests/bin/release/video.dll
/SearchTests/bin/release/search.dll
/OtherProjects

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

有什么想法吗?

附:使用 TeamCity 5.0 和 NUnit 2.5。

【问题讨论】:

    标签: nunit teamcity


    【解决方案1】:

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

    我认为你最好对你正在做的任何事情进行返工,这样你就不会依赖 CurrentDirectory。您现在依赖 CurrentDirectory 遇到了什么问题?

    【讨论】:

    • 我正在尝试获取 Dependencies 文件夹中文件的相对路径。我这样做的唯一方法(不添加我绝对不想要的完整路径)是使用 CurrentDirectory。
    • 如果您打算使用 CurrentDirectory,那么您对 ​​Dependencies 文件夹的查找将在生产中出现错误。我会调查 Assembly.GetExecutingAssembly().Location
    • 啊,好吧,我想我可以让它工作。我会试一试,然后回复你。
    【解决方案2】:

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

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

    【讨论】:

    • 好吧,我试图寻找这样的设置,但我运气不佳。 TeamCity 似乎从程序集的位置运行测试,我找不到覆盖它的设置。 NUnit 似乎从打开 GUI 的路径运行它,我似乎找不到一个设置来告诉它从程序集文件夹运行测试。我似乎只是缺少一个小设置。
    • 你不能在每个测试的设置阶段设置 Environment.CurrentDirectory 吗?
    • 这就是为什么我首先需要当前目录,因为我不知道 DLL 在文件树中的位置。上面提到的装配位置对我来说听起来像是一张票,因为它总是会给我提供执行装配的路径。
    • 然后我会使用 popester 的建议来使用 Assembly.GetExecutingAssembly().Location。我使用相同的方法来为我开发的程序加载插件
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2017-02-12
    • 1970-01-01
    • 2018-10-24
    • 2010-12-21
    • 1970-01-01
    • 2020-07-03
    • 1970-01-01
    相关资源
    最近更新 更多