c# - 如何最小起订量 Amazon MWS 的响应以进行单元测试

标签 c# xml unit-testing moq amazon-mws

上下文

我正在对一个 C# .Net 类进行单元测试,该类调用 Amazon MWS API 中的 ListMatchingProducts 操作(使用 MWSClientCsRuntime)。

问题

Amazon MWS API 是一个不断变化的目标,产品数据一直在变化,因此我希望能够最小起订量 API 返回的 ListMatchingProductsResponse 对象。我可以使用 MWS 暂存器获取 API 响应并将其存储在 xml 文件中。但是,在单元测试中,我需要将这些文件中的数据强制转换为 ListMatchingProductsResponse 对象。

问题

如何将此 xml 数据加载到 ListMatchingProductsResponse 对象中? (我注意到该对象有一个 ReadFragmentsFrom 方法,但我不知道如何使用它)。

代码

[TestClass]
public class PossibleAmazonProductMatchesTests
{
    string testDataDirectory = Directory.GetParent(Directory.GetCurrentDirectory()).Parent.FullName + @"\Test data";

    [TestMethod]
    public void FindSpanners()
    {
        // Arrange

        ListMatchingProductsRequest request = new ListMatchingProductsRequest("secret key", "market id", "spanner");
        ListMatchingProductsResult result = new ListMatchingProductsResult();

        ListMatchingProductsResponse response = new ListMatchingProductsResponse();

        string xmlString = File.ReadAllText(this.testDataDirectory + @"\Spanners Response.xml");

        // *** The issue - How do I coerce xmlString into response? ***

        var client = new Mock<MarketplaceWebServiceProductsClient>();
        client.Setup(c => c.ListMatchingProducts(request)).Returns(response);

        // Act

        // This is the method being tested. It calls ListMatchingProducts which is being mocked.
        PossibleAmazonProductMatches possibleAmazonProductMatches = new PossibleAmazonProductMatches("spanners", client);

        // Assert

        Assert.IsTrue(possibleAmazonProductMatches.SpannersFound == true);
    }
}

最佳答案

这看起来像是一个简单的情况,必须读取 XML 文件,然后将其从 XML 反序列化为所需的对象类型。

更好的是,您可以将其抽象为执行所需行为的服务背后的内容,而无需将代码与实现问题紧密耦合。

将 MWS 视为第三部分服务,并将其包装在您可以完全控制的抽象后面。这样您就可以在测试时配置所需的行为。

关于c# - 如何最小起订量 Amazon MWS 的响应以进行单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43642965/

相关文章:

c# - 仍在与 JSON.net 日期格式作斗争

c# - 在 MySQL 中加密,在 C# 中解密

c# - 有没有一种简单的方法可以在Flags中写入以2为底的数字?

c# - ASP.NET Core 中 Func<T> 类型的依赖注入(inject)

java - 在 mac os 上配置 hadoop namenode 时出现 yarn-site.xml 错误

android - 如何使按钮重定向到另一个 xml 页面

python - assert_has_calls 不会 stub 方法调用

ruby - 在 Ruby 项目中使用 SimpleCov

java - Spring 3 : inject a dependency from a library?

android - 如何验证方法是否在模拟类的回调中运行?