我有一个类(我们称之为A):
我开始创建一个单元测试:
虽然该Web服务有很多方法。
答案 0 :(得分:5)
您应该在Web服务周围创建一个包装器接口,并使您的测试类依赖于该接口,而不是直接在Web服务上;然后你可以模拟界面。只有让该接口公开您感兴趣的Web服务的方法。这被称为外观模式,详细here。
如果不了解您正在测试的内容,请针对以下内容:
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....
}
答案 1 :(得分:1)
简短回答是:)。很长的答案你应该使用某种模拟lib,例如:http://code.google.com/p/mockito/并在你的单元测试中模拟WS存根并将其传递给测试类。这就是力量的方式:)
答案 2 :(得分:1)
当你对一个类进行单元测试时,你总是希望确保只测试该类而不包括它的依赖项。要做到这一点,你必须模拟你的WS,让它在调用方法时返回虚拟数据。根据您的情况,您不必为每个测试模拟所有方法,我只会说那些使用的方法。
有关模拟的示例,您可以阅读以下文章:http://written-in-codes.blogspot.ca/2011/11/unit-tests-part-deux.html