【问题标题】:How to write an unit test for 'getCurrentTime()' function?如何为“getCurrentTime()”函数编写单元测试?
【发布时间】:2011-11-25 11:29:07
【问题描述】:

我最近有一个 getter 函数,它只使用某种时间格式返回当前时间。由于它使用某些系统 API 返回当前时间,我想不出为此编写单元测试的方法。

谁能给点建议?

【问题讨论】:

  • 您到底想测试什么?你想测试它是否返回正确的时间?还是以正确的格式返回时间?
  • 嗨丹尼尔,是的,我想测试它是否在正确的时间和正确的格式。

标签: unit-testing


【解决方案1】:

至少你可以检查结果是否不为空,如果你调用它两次,第二个结果大于第一个。

【讨论】:

  • 不错的!这将为此添加两个。
  • 一个可能的问题是如果两个系统调用发生得足够快以至于返回的时间不会改变。我可以很容易地看到对 System.getCurrentTimeMillis() 的两次调用花费了不到一毫秒的时间。当然,您可以在它们之间添加对 Thread.sleep() 的调用,但这感觉就像是 hack。
【解决方案2】:

您需要将系统 API 与被测系统分开。

一种已知的方法是使用依赖注入。您将一个类注入到检索当前时间的时间格式化程序中。

在您的单元测试中,您插入一个 Fake CurrentTime api,它将返回预定义的值,以便您可以检查 TimeFormatter 的结果。 当您在生产环境中运行时,您会使用系统 API。

【讨论】:

    【解决方案3】:

    理想的解决方案是不直接使用系统时间,而是让您的所有代码使用 System 的包装器(假设是 Java),您可以模拟出来。这可能不可行或不容易。

    更简单的方法是创建第二种方法来严格执行格式化,该方法将时间作为参数。然后,您可以轻松彻底地测试格式。

    然后在您的原始方法中调用传递系统时间的新方法(例如System.currentTimeMillis())并且不要为它编写测试。在这一点上,你可以做任何事情,没有什么可出错的,所以真的没有什么要测试的。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-02-15
      • 2016-09-25
      • 1970-01-01
      • 2022-01-11
      • 2018-01-17
      • 2012-01-06
      相关资源
      最近更新 更多