【问题标题】:How to access project files from NUnit tests如何从 NUnit 测试访问项目文件
【发布时间】:2010-05-27 13:16:11
【问题描述】:

我有一些使用 ReSharpers“从解决方案运行所有测试”功能运行的测试。正在测试的类之一依赖于与包含它的程序集位于同一文件夹中的文件。此文件通过 MSBuild 复制到输出目录(将“复制到输出目录”设置为“始终复制”)。

问题:测试不是从正常的程序集输出目录运行,而是从我的用户配置文件中的某个临时位置运行。

因此,我真的不知道在哪里查找文件 - 测试运行程序不会将它复制到那里。我可以强迫它吗?

【问题讨论】:

    标签: unit-testing nunit resharper


    【解决方案1】:

    NUnit 网站建议在这种情况下使用 Assembly.CodeBase 属性,这会导致我需要的 bin/debug。

    “注意:如果您想禁用卷影复制以访问与您的程序集位于同一目录中的文件,您应该知道还有其他选择。考虑使用 Assembly.Codebase 属性而不是 Assembly.Location。”

    .Location 返回 Uri 样式地址“file:////D://Projects ...”,所以我使用的实际代码是

    string applicationDirectory = new Uri(Path.GetDirectoryName(Assembly.GetExecutingAssembly().CodeBase)).LocalPath;
    

    【讨论】:

    • 您能否发布一个指向您找到该引用的页面的链接?
    • 这是他们的文档。当前版本的页面是http://www.nunit.org/index.php?p=settingsDialog&r=2.6.1。页面章节为“Test Loader Settings - Advanced”,详细介绍“Shadow copy”
    • 无论是否启用卷影复制选项,我的结果都相同,因此我必须采用此解决方案并使用Path.Combine(applicationDirectory, fileName) 为我的所有测试文件构建绝对路径。
    【解决方案2】:

    听起来您是在启用 Shadow Copy 选项的情况下运行测试。

    转到 Resharper->Options 并选择 Unit Testing 选项卡(位于列表底部)。取消选中“正在测试的影子复制程序集”并重试。

    【讨论】:

    • 非常好的答案,但我发现 Shadow Copy 是一个非常简洁的功能。无需手动从夹具设置中复制文件的任何替代方法?
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2021-07-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多