我继承了一些我想重构的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的调用。但是,我不是很喜欢这个,我担心很难保持这与第三方合同的变化保持一致。
此时,我需要一些指导,说明如何进一步推进重构单元测试?