上下文
我正在对一个 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/