微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

web-services – 如何对使用Web服务的类进行单元测试?

我有一个类(让我们称之为A):

>在构造函数中接受一个配置并基于它创建一个存根
Web服务并在私有字段中存储对它的引用.
>有一些方法可以调用Web方法和一些东西.

我开始创建一个单元测试:

>使用虚拟配置创建A类的实例.
>通过反射,它会注入模拟的Web服务存根.

虽然该Web服务有很多方法.

>我应该全部模拟它们(在每次测试中,使用不同的数据)吗?
>或者我可能应该创建另一个仅封装正在使用的Web方法的层?
>还是有另一种方法

解决方法

您应该在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....

}

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。

相关推荐