Moq - 如何模拟Web服务调用?

O.O*_*O.O 6 c# unit-testing moq

using下面打,我不想竟然打的外部资源.我想测试someResult和使用它的代码,但每次我运行我的单元测试时,这段代码仍然试图点击真正的Web服务.我如何使用moq伪造对Web服务的真实调用,但不使用模拟其他代码?

public IMyInterface.SomeMethod()
{    
     // hits a web service
     using ( mySoapClient client = new mySoapClient() )
     {
          var someResult = client.DoSomething();
       ...
       ...
     }
}


[TestMethod()]
public void SomeMethodTest()
{
    IMyInterface target = new MyInterface();
    target.SomeMethod();

    // Assert....
}
Run Code Online (Sandbox Code Playgroud)

cor*_*erm 14

您需要将Web服务实现与使用者分离

public class ClassIWantToTest
{
      public ClassIWantToTest(IServiceIWantToCall service) {}

      public void SomeMethod()
      {
           var results = service.DoSomething();
           //Rest of the logic here
      }
}
Run Code Online (Sandbox Code Playgroud)

现在你可以使用Moq来模拟它IServiceIWantToCall以测试逻辑SomeMethod