XDocument.Load() 和 XDocument.Save() 的测试方法

标签 testing mocking tdd linq-to-xml

我在 Visual Studio 2010 的 MVC4 Web API 应用程序中使用 XDocument,但不确定测试策略。

我的大部分单元测试都使用内存中的 XDocument,它适用于 Controller 、服务、存储库测试。

但是,我有 XDocument.Load(filename) 和 XDocument.Save(filename) 场景,我想测试它们(使用单元测试或集成测试)。

我一直在查看以下关于 SO here 的问题\答案但我不确定如何进行。

public class PathProvider
{
   public virtual string GetPath()
   {
      return HttpContext.Current.Server.MapPath("App_Data/policies.xml")
   }
}

PathProvider pathProvider = new PathProvider();
XDocument xdoc = XDocument.Load(pathProvider.GetPath());

所以,我知道我现在可以模拟调用 XDocument.Load(pathProvider.GetPath()) 的任何调用。

我是否应该尝试测试 PathProvider 是否有效?如果是这样,我将如何处理?

谢谢

戴维

最佳答案

Should I then be trying to test that PathProvider works? If, so, How would I approach this?

我的回答是否定的,至少不是从自动化测试开始。

仅由于您提供的代码片段,PathProvider 是 ASP.NET 框架的包装器(适配器)。我在这里唯一依赖的测试是协作测试,例如我会验证 GetPath() 在您期望的时候被调用。话虽这么说,上下文是这里的关键。

PathProvider pathProvider = new PathProvider();
XDocument xdoc = XDocument.Load(pathProvider.GetPath());

上面的代码充满了“测试框架”的味道,因此我什至懒得对这样的代码进行单元测试。如果您真的想确保这部分代码对 XML 文件等做正确的事情,我会回退到集成测试。尽管确实考虑到这可能是缓慢而脆弱的。

因此,我的解决方案是抽象正在加载的 XML 文档的概念,就像您对 PathProvider 所做的那样。从这里开始,手动测试就足够了。在此过程中,如果此类适配器中包含任何域逻辑,那么我将提取您可以单独测试的类/方法,而无需担心 XML 或文档加载等...

关于XDocument.Load() 和 XDocument.Save() 的测试方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14874216/

相关文章:

regex - 我如何在 perl 中像这样 (.+) 为指定的字符串使用正则表达式?

powershell - 如何正确测试模拟 CmdLet 的 ErrorVariable 值?

tdd - BDD/TDD vs JAD?

testing - 做集成测试时使用 web 项目 config.json

php - 使用 domcrawler 的 CakePHP 3 集成测试

asp.net - 如何让我的 ASP.NET 应用程序在我的自动化 UI 测试期间运行?

java - PowerMockito : mocking private method and get a value without accessing it

PHP 方法模拟检查传递给该方法的参数

c# - 创建用于测试 Windows.Web.Http.HttpClient 的模拟 IHttpFilter

backbone.js - 学习单元测试和 Jasmine