单元测试中如何mock/stub待测类中传进来的其他类的实例?
目前的项目及代码结构如下
- 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论