gpt4 book ai didi

java - 为什么使用静态方法不利于单元测试?

转载 作者:塔克拉玛干 更新时间:2023-11-02 19:59:19 24 4
gpt4 key购买 nike

我听说用静态方法创建对象不利于单元测试。例如,我们有以下层次结构:

public abstract class Base{

public static Base createConcrete(){
return new Concrete();
}

public static Base createSuperConcrete(){
return new SuperConcrete();
}
}

public class Concrete extends Base { }

public class SuperConcrete extends Base { }

最好改用实例 FactoryMethod。为什么使用 static 方法会在单元测试中造成太多痛苦?有人不能举个例子吗?

最佳答案

你的方法的主要缺点是没有办法让你的 Base 类的客户端与 ConcreteSuperConcrete 以外的任何东西一起工作>.

想想下面的例子:ConcreteSuperConcrete 都需要一些昂贵的资源来初始化(数据库连接或其他)。

使用 Base 类的类将在调用 Base.createConcrete() 时触发所有繁重的工作——因此您只能出于这个原因进行集成测试.

另一方面,如果 create*Concrete 是实例方法,您可以为您的客户提供 Base 的模拟/虚拟实现,创建轻量级“具体”实例,刚好足以运行您的测试用例。您将能够使用像 Mockito 这样的框架,或者只是手动创建虚拟实现。

只有使用像 PowerMock 这样真正具有侵入性的工具(如果可能的话)才能模拟静态方法,因此会使您的测试代码变得不必要的复杂。

关于java - 为什么使用静态方法不利于单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30544357/

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