【问题标题】:Unit Test Linq XML Function单元测试 Linq XML 函数
【发布时间】:2018-07-10 16:42:54
【问题描述】:

我有下一个函数,它根据文档中的数据创建一个列表。

我需要进行一些单元测试,但不知道如何为这个特定功能实际执行该操作。我到处阅读,但仍然没有运气。

public List<Info> getInfo()
{
    XDocument doc = loadDocument();

    var variable = (from elem in doc.Descendants("Information").Elements()
                   select new Info
                   {
                       Include = elem.Element("Include") != null && (elem.Element("Include").Value.Equals("true") || elem.Element("Include").Value.Equals("false")) ? Convert.ToBoolean(elem.Element("Include").Value) : false,
                       InfoName = elem.Element("Name") != null ? elem.Element("Name").Value : String.Empty,
                       StartDate = elem.Element("StartDate") != null ? elem.Element("StartDate").Value : String.Empty,
                       EndDate = elem.Element("EndDate") != null ? elem.Element("EndDate").Value : String.Empty,
                       Mark = elem.Element("Mark") != null ? Convert.ToDouble(elem.Element("Mark").Value) : Double.NaN
                   }
                   ).ToList();

    return variable;
}

public XDocument loadDocument() 
{ 
    XDocument doc = XDocument.Load("info.xml"); 
    return doc; 
}

【问题讨论】:

  • 你对单元测试了解多少? loadDocument() 是做什么的?你知道如何模拟输入和依赖关系吗?你是如何在系统中做到这一点的?
  • public XDocument loadDocument() { XDocument doc = XDocument.Load("info.xml");返回文件;这就是加载文档的作用。我查看了一些示例,但我主要是单元测试新手并遇到了这个障碍。
  • @EmilPopescu 尽量避免将代码放入 cmets。 edit您的问题与相关信息,使其成为minimal reproducible example
  • 谁告诉你“做一些单元测试”?也许他们对您有一些有用的指示。通常你会测试你的代码单元,以确保它们按照你的想法去做。除非另有证明,否则假定提供的库代码(如 LINQ 和 LINQ to XML)可以正常工作。您的测试看起来像是在仔细检查内置功能。这通常不是很有帮助。最多,您正在检查 info.xml 是否具有您期望的结构。如果是,您要检查的内容:太好了。
  • @Corak 还没有测试。到目前为止提供的代码看起来像正在测试的主题。

标签: c# linq unit-testing


【解决方案1】:

我认为你需要做的是创建一个单元测试。

[TestMethod]
public void CheckMyData()
{
    var _info = GenerateData();
    Assert.IsTrue(_info.Include == true); //Mock condition to fulfill.
    Assert.IsFalse(_info.InfoName.Contains("test1_Name"));
    //... and so on...
    //You can also check for the expected type of values.
}

private Info GenerateData()
{
    var data = new Info
        {
          //We set some mokup values here
          Include = true,
          InfoName = "test_NAME",
          StartDate = "12-12-2005",
          EndDate = "14/12/2005",
          Mark = 12
        }
    return data;
}

【讨论】:

    【解决方案2】:

    This 正是您所需要的。 这个模拟框架具有模拟 LinQ 函数的独特能力。 您也可以将您的代码示例发送给他们的支持,他们将指导您如何正确地做到这一点

    【讨论】:

      猜你喜欢
      • 2014-05-12
      • 1970-01-01
      • 2023-03-26
      • 1970-01-01
      • 1970-01-01
      • 2021-11-29
      • 1970-01-01
      • 1970-01-01
      • 2010-09-23
      相关资源
      最近更新 更多