【发布时间】:2014-05-29 20:19:57
【问题描述】:
我有一个使用 Mutex 来控制对全局共享资源的访问的 c# 类。除非创建共享资源,否则不会分配互斥锁。我正在使用该类的部分模拟来隔离对某些获取互斥锁的方法的测试,做一些工作,然后释放它(实际上没有创建共享资源或互斥锁实例)。
我很想知道是否有一种首选的方式来模拟互斥锁。我可以将对 WaitOne 和 ReleaseMutex 的真正调用抽象为类上的方法并模拟它们。我可以在测试中为类的 mutex 成员变量显式分配一个新的 mutex 实例(假设我妥协并使单元测试可以访问 setter)。我可以将互斥锁包装在另一个实现互斥锁方法并行接口的类中,并将其注入到我的测试类中。
有没有更好的方法来模拟 System.Threading.Mutex 等系统资源?到目前为止,我选择将真正的调用抽象为类上的方法并模拟它们。
【问题讨论】:
-
一般来说,如果你想模拟一些你无法直接控制的东西(并且还不能通过提供自己的接口来模拟),你最好的选择是添加另一个抽象层并模拟那个。
标签: c# unit-testing rhino-mocks-3.5