gpt4 book ai didi

c# - 如何设置一个单元测试,如果另一个单元测试失败则跳过该单元测试?

转载 作者:太空狗 更新时间:2023-10-29 23:53:22 26 4
gpt4 key购买 nike

在 xUnit.net 中有没有办法使单元测试依赖于另一个单元测试,以便在另一个单元测试失败时跳过

注意:这不是关于测试之间共享夹具或使测试相互耦合等问题。我避免了这种情况。

例子

Given:     Unit tests OuterTest and InnerTest
Condition: If OuterTest is dependent on InnerTest and InnerTest fails
Result: OuterTest is skipped (ideally with an explanation)

理由

这是单元测试序列化的一部分,但我也可以想到其他用例。我有一个 Outer 类型,它依赖于 Inner 类型,其中 Inner 被序列化为 Outer 序列化的一部分。我有一个针对 Inner 类型的序列化单元测试,如果失败,我知道针对 Outer 的序列化单元测试将因嵌套而失败。

类型看起来像这样:

[Serializable]
class Inner {}

[Serializable]
class Outer {

public Outer(Inner inner) {
Inner = inner;
}

[Serializable]
Inner Inner { get; }
}
  • 我真的不想在 Outer 的单元测试中使用 Inner 的 stub ,因为这迫使我为 Inner 引入一个接口(interface)并弄乱一个层次结构,在这个层次结构中只需要这些类型的一个具体实现.它还迫使我为 stub 创建一个自定义序列化程序,这听起来麻烦多于好处。

  • 鉴于很难为内部类创建 stub ,以下是我的论点:我不希望两个测试都失败,因为这很难找到问题的根本原因失败。我认为最好跳过 Outer 的单元测试并警告依赖项失败。

问题

我搜索了一段时间没有找到关于这个用例的任何信息,因此我有以下问题:

  1. 是否可以根据 xUnit.net 中其他单元测试的结果创建有条件运行的测试?
  2. 这是一个糟糕的请求还是代码的味道,如果是,为什么?

最佳答案

你不想那样做。如果您有破坏多个测试的东西,那么您希望您的测试展示一个问题影响整个系统的所有方式。

在您的情况下,您应该做的是通过序列化您的 Outer 类进行两股测试。一种是使用存在的对象,另一种是使用 Inner 类的模拟。

有一个强有力的论据认为,没有模拟的 Inner 类的情况可以被视为“集成”测试,但是,因为它只是使用存在的对象,我认为这是有点灰色地带。

进行 Outer 无法序列化的测试,因为 Inner 无法序列化,这仍然是非常重要的事情,需要通过查看单元测试的结果来了解。

关于c# - 如何设置一个单元测试,如果另一个单元测试失败则跳过该单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/37479079/

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