是否有可能模拟/假冒失败的锁定导致测试失败?

Ear*_*rlz 12 c# unit-testing locking mocking thread-safety

我正在围绕Dictionary编写一个薄的包装器,它被设计为线程安全的.因此,需要一些锁定,并且大多数逻辑都是确保正确锁定事物并以线程安全的方式访问.

现在,我正在尝试进行单元测试.我想要进行单元测试的一件大事就是锁定行为,以确保它是正确的.但是,我从未在任何地方看到过这种情况,所以我不确定如何去做.另外,我知道我可以使用一堆线程将内容扔到墙上,但是通过这种类型的测试,无法保证它在错误时会失败.这取决于操作系统定义的线程调度行为.

有哪些方法可以确保我的锁定行为在单元测试中是正确的?

Ale*_*kov 1

我认为仅凭Dictionary其本身您无法实现可靠的测试 - 您的目标是进行 2 个调用并行运行,但这不会可靠地发生。

您可以尝试使用自定义词典(即从常规词典派生)并为所有 Get/Add 方法添加回调。您将能够根据需要延迟两个线程中的调用...您将需要两个线程之间的单独同步,以使您的测试代码按照您想要的方式运行,而不是一直死锁。