单元测试,即不同依赖关系的函数按特定顺序调用

本文关键字:函数 顺序调用 关系 依赖 单元测试 | 更新日期: 2023-09-27 18:27:15

我有一个类,它有4个依赖项和一个核心函数,该函数按特定顺序从每个依赖项调用一个方法。功能看起来像这样:

Foo():
    A.a();
    B.b();
    C.c();
    D.d();

必须首先调用函数a。然后b.然后c.然后d.

如何对此进行单元测试?我读过一篇文章,你不应该在一个测试中模拟超过一个对象。

如果我遇到这样的情况,我的设计有缺陷吗?我想我想折射器只有3个依赖项,但它仍然不能解决我的问题。

还有一个关于测试的一般性问题:我在这门课上的测试感觉有点傻。我需要写一个测试来确保每个函数都被调用?显然,a被调用了。写测试感觉很没意义。

我用c#和moq来嘲讽。

单元测试,即不同依赖关系的函数按特定顺序调用

我所知道的使用moq测试这一点的唯一方法是进行一系列稍微复杂的回调。

像这个

bool aCalled = false;
bool bCalled = false;
bool cCalled = false;
bool dCalled = false;
Mock<A> mockA = new Mock<A>();
mockA.Setup(x => x.a())
       .Callback(aCalled=true);
Mock<B> mockB = new Mock<B>();
mockB.Setup(x => x.b())
       .Callback(if (aCalled){bCalled=true}else{Assert.Fail("B.b was called before A.a");
...etc for c and d