gpt4 book ai didi

java - 何时在单元测试中使用模拟对象

转载 作者:塔克拉玛干 更新时间:2023-11-01 21:44:07 26 4
gpt4 key购买 nike

我知道有很多关于模拟和测试的问题,但我没有找到任何对我有完美帮助的问题,所以我仍然无法理解以下内容:

如果我弄错了,请纠正我,但据我所知,单元测试用于隔离地测试一个特定类的业务逻辑,如果需要从外部获取任何对象,它们将被模拟。因此,例如,如果我有一个简单城市的公民管理系统,它将公民添加到列表中并按姓名返回公民(假设:公民仅包含一些基本的个人信息),如下所示:

public class ProcessClass {

ArrayList<Citizen> citizenList = new ArrayList<Citizen>();

public void addCitizen(Citizen citizen) {
citizenList.add(citizen);
}

public Citizen getByName(String name) {
for (Citizen c : citizenList) {
if (c.getName().equals(name)) {
return c;
}
}
return null;
}

}

如果现在我想对我的 ProcessClass 进行单元测试,我是将 Citizen 视为必须模拟的外部功能,还是只是创建一个 Citizen 用于测试目的?如果它们被模拟,我将如何测试通过名称获取对象的方法,因为模拟对象不包含参数?

最佳答案

当您编写新代码(以及新的单元测试)或重构现有代码时,您希望能够一遍又一遍地运行单元测试,以合理地确信现有功能是正确的没有损坏。因此,单元测试必须稳定、快速

假设要测试的类依赖于一些外部资源,例如数据库。您更改了代码,单元测试突然失败了。单元测试是否因为您刚刚引入的错误而中断,或者因为外部资源不可用?无法保证外部资源始终可用,因此单元测试不稳定。模拟外部资源。

此外,连接到外部资源可能会花费太多时间。当您最终有数千个连接到各种外部资源的测试时,连接到外部资源的毫秒数加起来,这会减慢您的速度。模拟外部资源。

现在添加一个 CI/CD 管道。在构建期间,单元测试失败。外部资源是否关闭或您的代码更改是否破坏了某些东西?也许构建服务器无法访问外部资源?模拟外部资源。

关于java - 何时在单元测试中使用模拟对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56078171/

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