gpt4 book ai didi

xunit - 如何根据当前平台跳过 xUnit 中的特定测试

转载 作者:行者123 更新时间:2023-12-03 08:10:38 52 4
gpt4 key购买 nike

  • 我有一个在 Windows 上构建的程序集
  • 我想在 Linux 中的单声道上运行 xUnit 测试。

  • 但是,我发现虽然其中 400 个测试可以(按顺序)运行,但某些测试要么挂起 xUnit 运行程序,要么完全关闭它。

    我不 护理如果某些测试无法在 Linux 上运行,则某些测试与 DTC 和一些我们不需要在那里支持的非托管 gumph 有关。

    然而,我想要的是对这些测试应用忽略,并在构建输出中正确标记测试被忽略的事实。

    这个问题可以归结为我猜有许多可能的解决方案
  • 如何通过控制台运行程序在 xUnit 中运行特定测试? (我还没有找到这方面的文档,也许我只是不够努力)
  • 是否可以反过来说“这是一个程序集,但请忽略这些特定测试”
  • 建议在这些测试上添加属性是一种更好的方法,以正式记录这些测试是特定于平台的 - 这可能吗?

  • 如果我能避免过多地修改原始代码,那就太好了,因为代码并不是我真正可以更改的,并且应用大量跨平台的 hack 可能不会太顺利。

    最佳答案

    我会避免外部化跳过测试(即,如果可能的话,配置/命令文件)。这在某种程度上不利于使测试易于运行且值得信赖。当其他人开始参与时,在代码中忽略测试是最安全的方法。
    我可以看到许多选项,这里有两个涉及修改现有代码。
    选项 1 - 最具侵入性的编译时平台检测
    在 VS 解决方案中,定义另一个配置来定义预编译器标志 MONOWIN (只是为了明确表示它是用于在 Windows 上编译以在 Mono 上使用的代码的标志)。
    然后定义一个属性,当为 Mono 编译时,该属性将使测试被忽略:

    public class IgnoreOnMonoFactAttribute : FactAttribute {
    #if MONOWIN
    public IgnoreOnMonoFactAttribute() {
    Skip = "Ignored on Mono";
    }
    #endif
    }
    实际上很难找到这种方法的任何优势,因为它涉及对原始解决方案进行模拟并添加另一个需要支持的配置。
    选项 2 - 有点侵入性 - 运行时平台检测
    以下是与 option1 类似的解决方案,只是不需要单独配置:
    public class IgnoreOnMonoFactAttribute : FactAttribute {

    public IgnoreOnMonoFactAttribute() {
    if(IsRunningOnMono()) {
    Skip = "Ignored on Mono";
    }
    }
    /// <summary>
    /// Determine if runtime is Mono.
    /// Taken from http://stackoverflow.com/questions/721161
    /// </summary>
    /// <returns>True if being executed in Mono, false otherwise.</returns>
    public static bool IsRunningOnMono() {
    return Type.GetType("Mono.Runtime") != null;
    }
    }
    注 1
    如果一个方法被标记为 [Fact],xUnit runner 将运行两次。和 [IgnoreOnMonoFact] . (CodeRush 不这样做,在这种情况下,我认为 xUnit 是正确的)。这意味着任何测试方法都必须有 [Fact]替换为 [IgnoreOnMonoFact]注2
    CodeRush 测试运行程序仍然运行 [IgnoreOnMonoFact]测试,但它确实忽略了 [Fact(Skip="reason")]测试。我认为这是由于 CodeRush 反射(reflect)了 xUnit 而实际上并没有在 xUnit 库的帮助下运行它。这适用于 xUnit runner。

    关于xunit - 如何根据当前平台跳过 xUnit 中的特定测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4421328/

    52 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com