在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序列化的一部分。我有一个内部类型的序列化单元测试,如果失败,我知道外部的序列化单元测试将因嵌套而失败。
类型看起来像这样:
[Serializable]
class Inner {}
[Serializable]
class Outer {
public Outer(Inner inner) {
Inner = inner;
}
[Serializable]
Inner Inner { get; }
}
我真的不想在Outer的单元测试中使用Stub for Inner,因为这迫使我为Inner引入一个接口并且混乱了一个层次结构,其中只需要这些类型的单个具体实现。它还迫使我为存根创建一个自定义序列化器,这听起来比利益更麻烦。
鉴于很难为内部类创建存根,以下是我的论点:我不希望两个测试都失败,因为这使得很难找到其根本原因失败。我认为如果跳过Outer的单元测试并发出依赖失败的警告,那就更好了。
在搜索一段时间后,我没有找到有关此用例的任何信息,因此我有以下问题:
答案 0 :(得分:0)
你不想这样做。如果你有一些东西打破了多个测试,那么你希望你的测试能够展示一个问题影响整个系统的所有方法。
在您的案例中,您应该做的是通过序列化Outer
课程来进行两组测试。一个是对象存在,另一个是模拟你的Inner
类。
有一个强有力的论据,即没有模拟Inner
类的情况可以被视为"整合"然而,测试,因为它只是使用存在的对象,我认为这是一个灰色区域。
进行Outer
无法序列化的测试,因为Inner
无法通过查看单元测试的结果来了解非常重要的内容。