【问题标题】:Run NUnit tests in release mode在发布模式下运行 NUnit 测试
【发布时间】:2014-02-26 09:03:09
【问题描述】:

我有问题。

#if DEBUG
        ca.ConveyancingAttorneyID = "C0B68DC3-C396-4264-880B-1A699C53A8CE";
        ca.ConveyancingFirmID = "C0B68DC3-C396-4264-880B-1A699C53A8CE";
#endif

当我们在调试模式下运行时,我们对标识符进行硬编码。在发布时,它显然是动态设置的。

现在当涉及到映射代码的单元测试时,我不得不这样做:(最初我只是测试了“发布案例”,然后在调试模式下总是会失败)

#if RELEASE
        Guid id = new Guid("1A92CE5A-D956-486B-9B65-0A3630EF0285"); 
#endif
#if DEBUG
        Guid id = new Guid("C0B68DC3-C396-4264-880B-1A699C53A8CE"); 
#endif

这并不理想。并且必须记住(并提醒队友)始终在发布时运行单元测试也是一件麻烦事。我们没有持续集成设置,因此测试只能在本地运行。

有没有办法强制 NUnit / Visual Studio Testrunner / Resharper Testrunner 总是在发布模式下运行测试?或者有没有更好的方法来解决这个问题,请记住,这种“#if DEBUG”代码块在解决方案中非常丰富。

【问题讨论】:

  • We don't have a continuous integration setup, so the tests are only ever run locally. - 这似乎是根本问题。
  • 告诉我。在我加入之前,没有单元测试。
  • @JohanVenter #if DEBUG Assert.Fail("...") #endif ?

标签: c# visual-studio unit-testing nunit


【解决方案1】:

如果必须运行 Release,请使用参数 /config:Release

【讨论】:

  • 我在哪里添加这个参数?你能详细说明一下吗?
【解决方案2】:

我不确定我们是否对您的项目结构有足够的了解,无法以适当的方式回答这个问题。这基本上取决于您在何处以及如何使用这些值。

理想情况下,您应该通过接口从某处获取这些 ID。这将使您可以伪造并切换该接口后面的实现,从而允许您在需要测试使用这些值的逻辑时返回硬编码的虚拟值。

您可以设置一个配置选项,允许您指定是否使用真实实现,或一个虚拟数据提供者以允许切换而无需重新编译。

更新:由于上述内容对您的具体问题并不是一个很好的答案,因此这里是另一个尝试:在Resharper > Options > Tools > Unit Testing 下,有一个选项从以下位置运行测试: ,您可以在其中指定要使用的文件夹,而不是默认的项目输出文件夹。

这可能是一个长镜头,但也许您可以配置 VS 将您的项目的 Release 版本构建到某个特定文件夹,并参考它进行测试,即使主项目构建配置设置为 Debug?

【讨论】:

  • 是的,针对接口进行编码并可能使用 Unity 之类的东西非常适合替换“假”实现。不幸的是,这将是一个相当麻烦的项目。也许我会尝试将构建的 dll 发送到您所说的文件夹中。从可维护性的角度来看,这本身可能是一种痛苦?不太了解如何保持引用同步?
  • 将此标记为答案,给出了多个选项。可能只是抽象一个配置设置,我可以在单元测试时强制“发布”。谢谢
【解决方案3】:

记住在使用参数时区分大小写很重要,例如/config:Release from Xeon's answer否则你会得到一个误导性的错误:

Invalid : Path_to_your_file
File type is not supported error

(没有足够的声誉来评论)

【讨论】:

    猜你喜欢
    • 2012-03-07
    • 1970-01-01
    • 2013-05-15
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多