我应该如何对线程代码进行单元测试?

到目前为止,我似乎避免了测试多线程代码的噩梦,因为它似乎太多了。我想问一下人们如何去测试依赖于线程的代码才能成功执行,或者人们如何去测试那些仅在两个线程以给定方式交互时才会出现的问题?

对于当今的程序员来说,这似乎是一个非常关键的问题,将我们的知识集中在这一恕我直言上将很有用。

回答:

看,没有简单的方法可以做到这一点。我正在开发一个本质上是多线程的项目。事件来自操作系统,我必须同时处理它们。

处理复杂的多线程应用程序代码的最简单方法是:如果太复杂而无法测试,则说明您做错了。如果您有一个实例,该实例具有作用于其上的多个线程,并且您无法测试这些线程彼此间步调一致的情况,则需要重做设计。它既简单又复杂。

为多线程编程的方法有很多,可以避免线程同时在实例中运行。最简单的是使所有对象不可变。当然,通常是不可能的。因此,您必须确定设计中线程与同一实例交互的那些位置,并减少这些位置的数量。通过这样做,您隔离了实际发生多线程的几个类,从而降低了测试系统的总体复杂性。

但是,您必须意识到,即使这样做,也仍然无法测试两个线程相互踩踏的所有情况。为此,您必须在同一测试中同时运行两个线程,然后精确控制它们在任何给定时刻执行的行。您能做的最好的就是模拟这种情况。但这可能需要您专门为测试编写代码,而这仅是迈向真正解决方案的一半。

测试代码是否存在线程问题的最佳方法可能是对代码进行静态分析。如果您的线程代码没有遵循一组有限的线程安全模式,那么您可能会遇到问题。我相信VS中的代码分析确实包含一些线程知识,但可能不多。

看起来,就目前而言(可能会好时机),测试多线程应用程序的最佳方法是尽可能降低线程代码的复杂性。尽量减少线程交互的区域,尽可能地进行测试,并使用代码分析来识别危险区域。

以上是 我应该如何对线程代码进行单元测试? 的全部内容, 来源链接: utcz.com/qa/400620.html

回到顶部