如何模拟返回最终类的静态方法?

如何模拟返回最终类的静态方法?,第1张

如何模拟返回最终类的静态方法?

改善代码并使其更具可测试性的建议:

首先,您不会像您给我们的示例那样模拟 声明 。您可以模拟 对象 并将其引用分配给其类型表示超类型的变量。

另外,如果您觉得自己必须嘲笑某些东西,那么显然您已经在代码片段中找到了一个重要的依赖项。

使这个概念显而易见!

在您的情况下,您想要获取一个

Bigquery
对象并将其引用分配给变量。不清楚的概念是有人必须 提供 这样的对象。

通过一个界面来阐明这个概念:

interface BigqueryProvider {    Bigquery provide(Object options);}

在班上你也有这样的陈述

Bigquery bigquery = Transport.newBigQueryClient(options).build();

您现在添加以下实例变量

private final BigqueryProvider bigqueryProvider;

并相应地更改您的构造函数。正如我所做的,

final
它必须在构建时设置。当然,您还必须标识调用构造函数的代码。为此,您还需要一个默认实现:

final class DefaultBigqueryProvider implements BigqueryProvider {    @Override    public Bigquery provide(Object options) {        return Transport.newBigQueryClient(options).build();    }}

然后将上述分配更改为

Bigquery bigquery = bigqueryProvider.provide(options);

现在开始测试:在测试中,您现在可以为提供程序接口提供测试实现。一个模拟框架可以轻松地为您做到这一点。您还可以返回所

Bigquery
选择的对象,无论该对象是该类还是子类的对象,都没有关系。

然后,您的测试代码通过为您提供一个

BigqueryProvider
完全受控的模拟对象来实例化您的类。



欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5165539.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-11-18
下一篇 2022-11-18

发表评论

登录后才能评论

评论列表(0条)

保存