Webサービスの周りにラッパーインターフェイスを作成し、テスト対象のクラスがWebサービスに直接依存するのではなく、そのインターフェイスに依存するようにする必要があります。その後、インターフェイスをモックできます。そのインターフェイスに、興味深いと思われるWebサービスのメソッドのみを公開させます。これはファサードパターンと呼ばれ、ここで詳しく説明します。
テストしているものについての手がかりを持たずに、次のようなものを目指してください。
public interface IWebserviceWrapper
{
Whatever DoStuff(int something);
}
public class WebserviceWrapper : IWebserviceWrapper
{
private WebService _theActualWebservice;
public WebserviceWrapper(Webservice theService)
{
_theActualWebService = theService;
}
public Whatever DoStuff(int something)
{
return _theActualWebservice.DoSomething(something);
}
}
この場合、テストは次のようになります(この場合、MOQを使用)
public void Test_doing_something()
{
Mock<IWebserviceWrapper> _serviceWrapperMock = new Mock<IWebserviceWrapper>();
_serviceWrapperMock.SetUp(m => m.DoStuff(12345)).Returns(new Whatever());
var classUnderTest = new ClassUnderTest(_serviceWrapperMock.Object);
var result = classUnderTest.Dothings(12345);
Assert.Whatever....
}