【发布时间】:2017-04-28 00:24:04
【问题描述】:
上下文
我正在对调用亚马逊 MWS API 中的ListMatchingProducts 操作的 C# .Net 类进行单元测试(使用 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);
}
}
【问题讨论】:
-
提供一个minimal reproducible example(代码)来演示场景并更好地解释您的问题。
-
@Nkosi 全部完成。
-
这看起来像是一个简单的例子,必须读取 XML 文件,将其从 XML 反序列化为所需的对象类型。只是想确保我明白你想要做什么。
-
啊,这很有道理。因此,最好放弃我目前使用 MWS 暂存器获取 xml 并将其粘贴到文件中的策略。最好编写从 API 读取的内容并将其序列化到文件中。然后我可以在测试时反序列化它。如果您愿意在下面发布一些内容,很高兴将其标记为答案。
-
@ScottG 非常感谢。在客户端库中钻研,我发现 MarketplaceWebServiceProductsMock.cs 给了我一个完整的例子。再加上 Nkosi 的评论,看起来我可以在这里得到一个有用的抽象。一旦我有了它,我会发布一些工作代码。
标签: c# xml unit-testing moq amazon-mws