gpt4 book ai didi

java - 如何正确使用模拟进行单元测试

转载 作者:行者123 更新时间:2023-12-01 19:12:02 25 4
gpt4 key购买 nike

1)我有以下类(class):

Class A {
public A() {}
}

Class B {
private A a1;
public A a2;

public B(A a3) {}
public A m1(A a4) {
A a5 = new A();
return a5;
}

}

我想对 B 类进行单元测试。我希望它只测试 B 类,独立于 A。据我所知,我需要为 A 创建一个模拟类。之后我应该使用它而不是 A .但是如何在不更改代码的情况下做到这一点呢?

我见过一个例子,A和A的mock都实现了一个公共(public)接口(interface),然后在B类中,该接口(interface)就是方法调用参数的形式类型。这是正确的方法吗?这只会对 a2、a3 和 a4 有帮助,但其他的我该怎么办?

2) 像 mokito 这样的框架可以如何帮助我?值得花精力去学习如何与他们合作吗?

最佳答案

根据定义,模拟与它们所替换的参数或依赖项具有相同的类型。因此它们要么是 A 的子类(如果 A 是具体类),要么是 A 的实现(如果 A 是接口(interface))。

模拟接口(interface)通常比模拟具体类更容易,并且用接口(interface)而不是具体类来表达依赖关系可以减少耦合,并允许更轻松地模拟和测试。

在你的例子中,由于 B 创建了 A 的实例,A 当然是一个具体的类,该方法当然会返回一个真正的 A 实例。除了 a1 之外,所有其他 A 实例都可以被模拟,a1 是私有(private)的并且无法从外部访问(除非使用令人讨厌的反射技巧)。

一定要学习如何使用模拟和 stub 。如果您想认真对待单元测试,它们非常有值(value)。

关于java - 如何正确使用模拟进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8072249/

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