【问题标题】:How to use Microsoft Fakes to isolate a web service without using Dependency Injection如何在不使用依赖注入的情况下使用 Microsoft Fakes 来隔离 Web 服务
【发布时间】:2015-07-10 19:21:11
【问题描述】:

我正在测试一个 Web 服务客户端,需要隔离对 Web 服务的调用。

我已经被告知我们不能使用依赖注入。如何隔离 Web 服务,以便测试调用该服务的业务逻辑。由于我无法控制网络服务,我需要确定服务将返回的值。

有人告诉我,使用 Microsoft Fakes 我可以做到这一点,但不知道如何定义假货。

我正在测试的代码的简化版本是:

var client = new Serviceprovider.ServiceProxies.PromoService.PromoServiceClient();
client.ClientCredentials.Windows.AllowedImpersonationLevel = client.Open();
Promo promoFromMaps = client.GetPromoById(exitingPm.NetworkId, true, true, true, exitingPm.MapsPromoId);

我想控制存储在 promoFromMaps 中的值,以便能够测试之后发生的业务逻辑。

感谢您的宝贵时间。

【问题讨论】:

  • 看起来您需要填充 PromoServiceClient 所需的成员。类似于ShimPromoServiceClient.GetPromoByIdInt32BooleanBooleanBooleanInt32 = () => new Promo() 的东西,尽管你可能想在里面填充一些东西。我真的不知道您需要隔离哪些部分以及您正在测试哪些部分。我也会推后一点,因为即使这样可行,垫片自然是丑陋的代码。

标签: c# web-services microsoft-fakes isolation shim


【解决方案1】:

看来您应该阅读以下有关该主题的 Microsoft 文档:https://msdn.microsoft.com/en-us/library/hh549175.aspx

您需要做的是右键单击 Serviceprovider 引用并选择 Add Fake。这将在您的测试项目中创建一个名为 Fakes 的文件夹。之后整个 DLL 被伪造,您可以通过名称 ShimPromoService 使用伪造的 PromoService。然后你可以像这样设置它:

ShimPromoService.PromoServiceClient = () => new Client(); //Probably return a mock or something

这样,如果您想(使用 Moq、NSubstitute 等)从 PromoServiceClient 方法返回一个模拟。

【讨论】:

    猜你喜欢
    • 2011-04-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-12-08
    • 1970-01-01
    • 2019-06-08
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多