2008-11-20 88 views
4

有一个单元测试,指定某个函数返回一个值需要多长时间,这是不错的做法。我正在测试一个卷曲函数,并且想要指定它需要在5秒后超时。这是否符合单元测试的工作方式?单元测试是否有执行时间标准?

回答

2

测试你的函数加curl加服务器比单元测试更集成测试。话虽如此,如果你只有一个这样的测试,那你肯定是可行的。我写了,并且仍然有不是纯粹的单元测试的测试,但他们完成了他们的工作。我会尽可能保持他们的方向。

我唯一感到困扰的是5秒超时,这对单元测试来说非常长。现在,这取决于它发生的频率。您是否考虑过基本测试(例如ping服务器),然后启动curl以避免启动不必要的测试。

如果您正在寻找替代品,那么将测试分为两部分:1 /测试如何调用curl; 2 /测试你的函数对结果做什么?这样你就可以与服务器隔离,你不需要任何超时。

1

我不认为,这是对方法合同的测试。这就是为什么我会说不,这不是一个单元测试。但它听起来像某种系统测试。

另一个不合格的例子是单元测试,事实上它需要很长时间(5秒)才能执行。通常情况下,您应该能够在每次进行更改时执行完整的单元测试套件。你不能等很久。

这就是为什么我认为你的测试应该在另一组测试中,而不是单元测试。它应该在您的日常构建/持续集成中执行,但不应在每个程序员签入之前执行。

0

我认为这可能是一个主观标签,因为你问的每个人都会有自己的单一测试的真实定义。

在我看来,时机不在大多数个案的单元测试范围之外,但是对于验证超时的正确行为的特定情况,只要执行时间合理即可。

4

这取决于。如果函数指定在5秒后超时,则这是单元测试的内容。我认为在像这样的单元测试中衡量性能不是一个好主意,因为它增加了太多的单元测试失败的其他原因。如果您开始在构建服务器上以并列方式运行单元测试,则不希望额外的负载例如通过测试失败。

0

民粹回答:是一个长期运行的单元测试是一个代码的气味,应立即更换

务实的答案:如果你有一个长期运行的测试问题,你要确保你的测试套件迅速失败的话,添加超时。

0

我想你应该嘲笑函数用来检测它花了足够长时间等待的方法,然后你可以立即测试超时而不是等待实时。

0

如果答案是否定的?这是否意味着你不会写测试?

如果是特殊情况,我会写测试,现在担心它。

如果我盯着有很多涉及时间的测试,我可能会将它们从正常的单元测试中分离出来,以便我可以独立或一起运行这些集。