【发布时间】:2011-01-02 00:38:54
【问题描述】:
假设您有一个方法可能会陷入无限的方法调用循环并因 StackOverflowException 而崩溃。比如我在this question中提到的幼稚的RecursiveSelect方法。
从 .NET Framework 2.0 版开始,StackOverflowException 对象无法被 try-catch 块捕获,相应的进程默认终止。因此,建议用户编写代码来检测和防止堆栈溢出。例如,如果您的应用程序依赖于递归,请使用计数器或状态条件来终止递归循环。
考虑到该信息(来自this answer),由于无法捕获异常,是否有可能为这样的事情编写测试?或者如果测试失败,是否会破坏整个测试套件?
注意:我知道我可以尝试一下,看看会发生什么,但我对它的一般信息更感兴趣。比如,不同的测试框架和测试运行器会以不同的方式处理这个问题吗?即使有可能,我是否应该避免这样的测试?
【问题讨论】:
-
您似乎在进行某种静态分析,该分析会告诉您方法是否每次都会终止。
-
也许吧?我在想的是,在提到的方法的情况下,发送一个确实有循环的对象图,并确保它不会抛出 StackOverflowException。但是,由于根据来自微软的消息,该异常无法被捕获。那么你将如何为这种情况编写测试呢?
-
StackOverFlow 异常确实会杀死 NUnit。其他跑步者可能会在某种程度上幸存下来。他们中的一些人在新流程中运行测试,并且可能能够将结果报告给 StackOverflow。由于 NUnit 仅使用 AppDomain 进行分离,我几乎可以肯定它会影响整个测试运行器。
-
我自己现在使用 TestDriven.Net 作为测试运行器进行了尝试。显然它似乎只是挂起......?
标签: c# unit-testing nunit stack-overflow