gpt4 book ai didi

java - 如何在单元测试中模拟日历对象以获取特定时间

转载 作者:行者123 更新时间:2023-12-02 02:20:23 26 4
gpt4 key购买 nike

我对编写单元测试的概念很陌生,所以我不确定如何继续下去。我的类中有以下方法,这是一个充满辅助函数的类,在我的应用程序中使用:

public static float getCurrentTime() {
Calendar calandar = Calendar.getInstance();
SimpleDateFormat simpleDateFormat = new SimpleDateFormat("HH:mm");
String[] time = simpleDateFormat.format(calandar.getTime()).split(":");
float returnResult = /*perform some calculations*/
return returnResult ;
}

现在在这个方法中,结果取决于现在是什么时间。在我的单元测试中,我想控制这方面以确保给我正确的时间,但我不知道该怎么做。我查找了 powermockito 并使用 when(..).then(..)方法,还研究了模拟日历对象,但因为它在方法中实例化,所以看起来不起作用。有任何想法吗?我在这个类中没有构造函数,因为这个类中的所有方法都是静态的,所以我只是通过类名调用这些方法,而不是实例化这个类的对象。

最佳答案

您在这里提到的所有问题都是因为您在其余代码中使用静态方法,而这些方法确实很难模拟。

这就是你的测试告诉你应该改变设计的方式。

您可以使用名为 TimeProvider 的类,其中包含一个方法 getCurrentTime(),而不是静态方法。

可以在您的测试中模拟并注入(inject)它。在这种情况下,所有测试都会变得更加容易,因为您可以使用该模拟来根据该方法在测试中提供您想要的任何 float 。

关于java - 如何在单元测试中模拟日历对象以获取特定时间,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48596125/

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