【问题标题】:Testing Approach for XDocument.Load() and XDocument.Save()XDocument.Load() 和 XDocument.Save() 的测试方法
【发布时间】:2013-02-14 11:51:01
【问题描述】:

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

我的大多数单元测试都使用内存中的 XDocument,它适用于控制器、服务、存储库测试。

但是,我有 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 是否有效?如果是这样,我将如何处理这个问题?

谢谢

戴维

【问题讨论】:

  • 您可以使用MS Fakes模拟对XDocument.Load的调用。
  • 谢谢,我应该说我正在使用 VS 2010 并且无法升级。我相信假货在 2010 年是行不通的。
  • 你可以使用前任Moles
  • 是的,我要去看看。这被认为是“良好做法”吗?我担心我无法正确测试这个是糟糕设计的征兆?
  • “但是,我有 XDocument.Load(filename) 和 XDocument.Save(filename) 方案,我想对其进行测试(使用单元测试或集成测试)。”你想测试什么?实际的 XML 结构(集成测试)还是调用 SaveLoad 方法的事实(单元测试)?我是否正确理解您在软件中处理 XDocument 并且只需要在专用类中处理文件引用?

标签: testing mocking tdd linq-to-xml


【解决方案1】:

然后我应该尝试测试 PathProvider 是否有效吗?如果是这样,我将如何处理这个问题?

我的回答是否定的,至少从一开始就没有自动化测试。

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

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

上面的代码带有“测试框架”的味道,因此我什至不会费心对这样的代码进行单元测试。如果您真的想确保这部分代码对 XML 文件等执行正确的操作,我会退回到集成测试。虽然考虑到这可能是缓慢而脆弱的。

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多