两种方法不能同时运行,如何为这种情况编写单元测试,或使其可测试?

时间:2016-08-15 14:37:33

标签: c# unit-testing concurrency architecture

假设我的课程MethodAMethodB中有两种方法。这些方法是在异步中运行的,我不希望它们同时运行。 在应用程序中,MethodA由用户调用,但MethodB由后台线程中的Timer运行。

我如何看待C#ish伪代码中的实现:

class MyClass 
{
     private static object _lock = new object();

     public async Task MethodA()
     {
          lock(_lock)
          {
              await DoSomeStuff();
          }
     }

     public async Task MethodB()
     {
          if(Monitor.IsEntered(_lock)
                return;
          lock(_lock)
          {
              await DoSomeStuff();
          }
     }
}

所以第一个问题是 - 上述方法是否正确?我想这更像https://codereview.stackexchange.com/的问题。

所以第二个问题是 - 假设方法是正确的,我如何进行单元测试,MethodA等待MethodB,而MethodB在{MethodA时不运行1}}正在运行?或者我如何重构它以使其可测试?

编辑:相应于评论,从使用标志变为锁定。

0 个答案:

没有答案