【发布时间】:2011-11-25 11:29:07
【问题描述】:
我最近有一个 getter 函数,它只使用某种时间格式返回当前时间。由于它使用某些系统 API 返回当前时间,我想不出为此编写单元测试的方法。
谁能给点建议?
【问题讨论】:
-
您到底想测试什么?你想测试它是否返回正确的时间?还是以正确的格式返回时间?
-
嗨丹尼尔,是的,我想测试它是否在正确的时间和正确的格式。
标签: unit-testing
我最近有一个 getter 函数,它只使用某种时间格式返回当前时间。由于它使用某些系统 API 返回当前时间,我想不出为此编写单元测试的方法。
谁能给点建议?
【问题讨论】:
标签: unit-testing
至少你可以检查结果是否不为空,如果你调用它两次,第二个结果大于第一个。
【讨论】:
您需要将系统 API 与被测系统分开。
一种已知的方法是使用依赖注入。您将一个类注入到检索当前时间的时间格式化程序中。
在您的单元测试中,您插入一个 Fake CurrentTime api,它将返回预定义的值,以便您可以检查 TimeFormatter 的结果。 当您在生产环境中运行时,您会使用系统 API。
【讨论】:
理想的解决方案是不直接使用系统时间,而是让您的所有代码使用 System 的包装器(假设是 Java),您可以模拟出来。这可能不可行或不容易。
更简单的方法是创建第二种方法来严格执行格式化,该方法将时间作为参数。然后,您可以轻松彻底地测试格式。
然后在您的原始方法中调用传递系统时间的新方法(例如System.currentTimeMillis())并且不要为它编写测试。在这一点上,你可以做任何事情,没有什么可出错的,所以真的没有什么要测试的。
【讨论】: