单元测试中如何mock/stub待测类中传进来的其他类的实例?

发布于 2022-09-11 14:59:04 字数 1183 浏览 30 评论 0

目前的项目及代码结构如下

- class A file (root)
    + class B file
        - class C file(待测的类)
// TypeScript
class A {
    private b: B;
    constructor(options) {
        this.b = new B(this);
    }
    otherMethod() {}
}

class B {
    private a: A;
    private c: C;
    constructor(root: A) {
        this.a = root;
        this.c = new C(root);
    }
    otherMethod() {}
}

class C {
    private a: A;
    constructor(root: A) {
        this.a = root;
    }
    handler(param1: boolean, param2: any) {
        if (param1) {
            this.a.otherMethod();
        } else {
            this.otherMethod();
        }
    }
    otherMethod() {}
}

现在要测试C中的handler方法,为了使handler不受其他环境的影响,应该stub/mock C的root参数以及handler中调用的C.otherMethod方法,然后const c = new C(mockedA); c.handler(mockedP1, mockedP2);

目前有点不解的是,如何stub/mock C的root参数?

最先想到的是,stub/mock一个A的实例传到C中,这样做了,就相当于new了一整个项目的实例,听起来有点不对。

其次想到的就是构造一个等同A的类,这样做的问题就是如果A非常庞大,则构造起来相当麻烦。

而在TypeScript中,所传的传参必须要符合接口才能保证没有类型错误,因此卡在了这里。

同样因为类型的引出的另一个问题,如何测试类中的私有方法?

烦请了解Typescript测试的同学解惑,谢谢。

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。
列表为空,暂无数据
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文