我已经编写了一个类和许多单元测试,但我没有使其线程安全.现在,我想让这个类线程安全,但为了证明它并使用TDD,我想在开始重构之前编写一些失败的单元测试.

有什么好办法吗?

我的第一个 idea 是创建几个线程,让它们以不安全的方式使用这个类.用足够多的线程做足够多的次数,我肯定会看到它崩溃.

推荐答案

有两种产品可以帮助您做到这一点:

两者都会判断代码中的死锁(通过单元测试),我认为Chess也会判断竞争条件.

使用这两种工具都很容易-您只需编写一个简单的单元测试,然后多次运行代码,并判断代码中是否可能出现死锁/争用条件.

Edit: Google发布了一个名为thread-race-test的工具,该工具可以在运行时(而不是在测试期间)判断竞态条件.
它不会找到所有的竞争条件,因为它只分析当前运行,而不是像上面的工具那样分析所有可能的场景,但它可能会帮助您在竞争条件发生后找到它.

Update:

.net相关问答推荐

MSBuild:CopyToOutputDirectory不会将本机DLL复制到输出

如何在PowerShell中隐藏任务延迟输出?

CLR如何在后台优化布尔比较操作?

NET 6:控制器方法不可访问

信号量的多线程问题

如何创建 LINQ to SQL 事务?

在c#中计算中位数

在 web api 控制器(.net 核心)中使用 async/await 或任务

为什么要判断这个!= null?

是否有用于 Windows / C# 开发的可嵌入 Webkit 组件?

Microsoft.Practices.ServiceLocation 来自哪里?

如何在 C# 中仅设置 DateTime 变量的时间部分

向 .NET 应用程序添加脚本功能

X509Certificate 构造函数异常

互锁且易变

覆盖 ASP.NET MVC 中的授权属性

您可以使用 Xamarin 开发 Linux 应用程序吗?

如何在 WPF 中的 Xaml 文件中添加注释?

string.Empty vs null.你用哪一个?

为什么 !0 是 Microsoft 中间语言 (MSIL) 中的一种类型?