gpt4 book ai didi

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

转载 作者:行者123 更新时间:2023-12-04 18:11:22 25 4
gpt4 key购买 nike

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

  • 在构造函数中接受一个配置并基于它创建一个 stub
    Web 服务并将对它的引用存储在私有(private)字段中。
  • 有一些调用 web 方法的方法和一些介于两者之间的东西。

  • 我开始创建一个单元测试:
  • 使用虚拟配置创建类 A 的实例。
  • 通过反射,它注入(inject)模拟的 Web 服务 stub 。

  • 尽管该 Web 服务有很多方法。
  • 我应该全部模拟它们吗(在每次测试中,使用不同的数据)?
  • 或者也许我应该创建另一个仅封装正在使用的 Web 方法的层?
  • 还是有另一种方法?
  • 最佳答案

    您应该围绕您的 web 服务创建一个包装器接口(interface),并使您的测试类依赖于该接口(interface),而不是直接依赖于 web 服务;然后你可以模拟界面。仅使该接口(interface)公开您感兴趣的 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....

    }

    关于web-services - 如何对使用 Web 服务的类进行单元测试?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13534260/

    25 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com