【问题标题】:How to mock a calendar object to get a specific time in unit testing [duplicate]如何模拟日历对象以获得单元测试中的特定时间[重复]
【发布时间】:2018-02-03 10:04:10
【问题描述】:

我对编写单元测试的概念不熟悉,所以我不知道如何继续。我的班级中有以下方法,这是一个充满辅助功能的班级,可在我的应用程序中使用:

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(..) 方法,还研究了模拟日历对象,但由于它在方法中实例化,它看起来不会起作用。有任何想法吗?我在这个类中没有构造函数,因为这个类中的所有方法都是静态的,所以我只是通过类名调用方法而不是实例化这个类的对象。

【问题讨论】:

    标签: java android unit-testing mocking


    【解决方案1】:

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

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

    你可能有一个名为 TimeProvider 的类,而不是静态方法,它有一个方法 getCurrentTime()。

    这可以在您的测试中进行模拟和注入。在这种情况下,所有测试都会变得容易得多,因为您可以使用该模拟来根据该方法在测试中提供您想要的任何浮点数。

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-22
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多