2011-11-25 76 views
0

我最近有一个getter函数,它只是使用特定的时间格式返回当前时间。由于它使用某些系统API返回当前时间,所以我想不出为此编写单元测试的方法。如何为'getCurrentTime()'函数编写单元测试?

任何人都可以对此提出建议吗?

+0

你想要测试什么?你想测试它返回正确的时间吗?或者时间以正确的格式返回? –

+0

嗨丹尼尔,是的,我想测试它是否在正确的时间和正确的格式。 – zyzyis

回答

1

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

+0

好的!那会为此增加两个。 – zyzyis

+0

如果两个系统调用足够快地发生,返回的时间不会改变,则可能会出现问题。我可以很容易地看到两次调用System.getCurrentTimeMillis()的时间少于一个ms。当然,你可以在它们之间添加一个对Thread.sleep()的调用,但是这感觉就像是一个黑客。 – Kane

1

您需要将系统API从您的系统中分离出来。

已知的方式来做到这一点是使用依赖注入。你在时间格式化程序中注入一个类来检索当前时间。

在单元测试中插入一个假CURRENTTIME API将返回预定的值,以便您可以检查您TimeFormatter的结果。 当您在生产中运行时,您使用System API。

1

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

一个更简单的方法是将严格创建第二个方法做了格式化,它以时间为参数。然后,您可以轻松彻底地测试格式。

然后在你原来的方法调用新的方法,通过在系统中的时间(例如System.currentTimeMillis())也懒得写测试它。没有什么可以做错的,你可以做任何事情,在那个时候,所以没有什么可以测试的。

相关问题