语境
我正在对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/