【发布时间】:2020-03-13 05:38:24
【问题描述】:
你们如何创建实用程序类?有标准方法吗?
就像标题说的那样,你可以有这样的东西:
public class Utils {
public static method1(){...}
public static method2(){...}
...
}
并通过调用Utils.method1() 来使用它,但这样一来,当您为使用此 utils 类的类编写单元测试时,您无法模拟静态方法,因此如果它们有错误,单元测试将失败。
或者,您可以使用这些 utils 在类的构造函数中提供 utils 类的实例,这样您就可以在单元测试中模拟它,但对我来说,将 utils 类的实例提供给每个人看起来非常尴尬使用它的类,并且通常必须创建 utils 类的实例。
我的意思是,如果我们有使用 Utils 类中的方法的 A 类,我们可以这样做:A a = new A(new Utils());
有没有一种方法可以同时实现?或者至少是行业标准的东西?还是我没有想到的其他方式?
【问题讨论】:
-
第二种方法是什么意思(“将utils类注入到构造函数中使用它的类中……但看起来很尴尬”)?
-
已编辑,希望现在更清楚
-
您可以将方法保持为静态,但使用 statick mocking 在使用 Utils 类的代码测试中使用类似 power mock 的东西对它们进行存根
-
commons.apache.org/proper/commons-lang/apidocs/org/apache/… Apache StringUtils 使用静态方法,我猜他们知道自己在做什么
-
@Bentaye 就像我提到的那样,这种方式在单元测试时有一个缺陷,我不确定他们在编写这个 utils 类时是否考虑到了这一点,因为他们真的不能...... @ErnestKiwele 我不知道一种方法模拟静态方法或对静态方法的调用,我的意思是您将如何将您的代码进行的调用
Utils.method1()重定向到其他一些模拟实现?