语境

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

问题

亚马逊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/

10-12 03:07