如何使用异步WCF调用重构异步MVC控制器以进行单元测试

时间:2015-11-25 12:02:09

标签: c# asp.net-mvc unit-testing mocking

我继承了一些我想重构的MVC代码来协助单元测试。网络服务由第三方提供,因此我无法控制它。

当前代码看起来像这样

    public void CreateUser(User user)
    {
        using (UserClient proxy = new UserClient())
        {
            AsyncManager.OutstandingOperations.Increment();
            CreateUser request = new CreateUser();

            request.EmailAddress = user.Username;
            request.Password = user.Password;

            proxy.CreateUserCompleted += (object sender, CreateUserCompletedEventArgs e) =>
            {
                // TODO Some other action

                AsyncManager.OutstandingOperations.Decrement();
            };
            proxy.CreateUserAsync(request);
        }
    }

正如您所看到的,通过Service-> Add Reference生成了对客户端的具体依赖,这使得单元测试无法进行。 我的第一个想法是使用依赖注入并注入由客户端代理生成的接口。

然而,这提出了一个问题,即接口不包含任何异步方法的定义,例如CreateUserAsync,所以我无法在单元测试中使用它

我考虑过制作一个异步代理接口,如下所示 界面

   public interface IUserServiceAsync{
        CreateUserAsync(UserRequest request);
   }

然后有具体的实现来包装对ServiceClient的调用。但是,我不是很喜欢这个,我担心很难保持这与第三方合同的变化保持一致。

此时,我需要一些指导,说明如何进一步推进重构单元测试?

0 个答案:

没有答案