gpt4 book ai didi

java - java.util.Date 的可模拟帮助器类

转载 作者:行者123 更新时间:2023-11-29 09:19:23 29 4
gpt4 key购买 nike

我想要一个帮助类来获取当前日期。由于将来的测试问题(可能需要返回与系统时间不同的时间),我想避免在代码中使用 new Date() 并且我无法使用 JodaTime 来防止测试问题。

我在想这样的 helper :

public interface DateHelper {

/**
* Returns the current date.
*/
Date now();

}

但是我怎样才能向客户提供这个接口(interface)的模拟呢?我能想到的唯一解决方案是:

public ClientOfDateHelper {

private DateHelper dateHelper;

// no-arg constructor that instantiates a standard implementation of DateHelper
public ClientOfDateHelper() {
this.dateHelper = new DefaultDateHelper();
}

// constructor that can be used to pass mock to the client
public ClientOfDateHelper(DateHelper suppliedDateHelper) {
this.dateHelper = suppliedDateHelper;
}

public void foo() {
Date today = dateHelper.now();
// do some work that requires today's date
}

}

是否有更优雅的解决方案,需要更少的代码来使用 DateHelper,但它允许使用模拟?

最佳答案

易于测试是依赖注入(inject)的好处之一。使用类似 Spring 的框架允许您在外部配置您的依赖项。因此,您的实现将与您的 spring 配置一起运行,并且您的单元测试将与您通过构造函数或属性 setter 提供的模拟一起运行。这消除了对上述两个构造器的需要,您只需使用一个接受 DateHelper 的构造器即可。

关于java - java.util.Date 的可模拟帮助器类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7390252/

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