繁体   English   中英

如何为接受xml文件路径作为参数的方法编写单元测试

[英]How to write Unit Test for a method that accepts an xml filepath as a parameter

我知道单元测试应该与任何依赖项隔离。 我正在尝试使用Typemock为应用程序编写单元测试。 问题是类中的方法之一,它接受几个Xml文件路径参数,然后在该方法内部创建一个XMLDocument对象,以在该方法中的某处使用。

 public bool ValidateXml(String aFilePath, String ruleXmlPath)
 {
     XmlDocument myValidatedXml = new XmlDocument();
     try
     {
         myValidatedXml.Load(aFilePath);
     }
     catch
     {
         return false;
     }


     XmlDocument myRuleXml = new XmlDocument();
     try
     {
         myRuleXml.Load(ruleXmlPath);
     }
     catch
     {
         return false;
     }

     MyClass myObject = new MyClass(myValidatedXml);
     //Do something more with myObject.

     XmlNodeList rules = myRuleXml.SelectNodes("//rule");
     //Do something more with rules object.

     return true;
 }

如何为此编写单元测试,而无需指定物理位置? 注意:很遗憾,我不允许更改代码。

AB Kolan的建议可以解决。 您还可以在测试项目中拥有一组测试XML文件,并将这些文件的路径传递到测试中的测试方法。

但是,让我做一个一般性的注意:对文件系统的依赖应该与对数据库的依赖放在同一目录中。 在像您这样的情况下,我通常从某种FileManager:IFileManager提供的流或字节数组中加载XML文档。 该文件管理器封装了文件系统操作。

您总是可以创建一个临时Xml并传递临时文件的路径,然后在执行测试后将其删除。 在NUnit中,可以使用[SetUp][TearDown]属性轻松实现。

[TestFixture]
public class MyTest 
{
    private string tempPathXML;

    [SetUp]
    public void SetUp()
    {
        //Create XML file 
        // Save it in a temp path
    }

    [TearDown]
    public void TearDown()
    {
        //Delete the temp file
    }

    public void SampleTestForValidateXml()
    {
        //Test using tempPathXML
    }
}

每个测试用例之前执行Setup方法, 每个测试用例之后执行Teardown方法

注意:对于MSTest,可以分别用[TestInitialize][TestCleanup]替换[Setup][TearDown]属性。 感谢Cwan!

您应该重构,以便传递XmlDocument。 甚至更好; 包装器-我们称它为XmlDocWrapper-封装了XmlDocuments功能。 包装器可以具有一个接口-IXmlDocWrapper。 如果通过接口,则可以在要测试类时对其进行模拟。

如果以这种方式进行操作,那么文件系统就不会出现问题了,这在单元测试中总是很好的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM