c# - 单元测试 void 方法

标签 c# unit-testing

我知道您可以通过检查其效果来对 void 方法进行单元测试。但是,查看此代码中的 loadConfigFile 方法:

    internal XmlDocument configData;

    public ConfigFile()
    {
        configData = new XmlDocument();
    }

    /// <summary>
    /// Load config file into memory
    /// </summary>
    /// <param name="filename">path and filename of config file</param>
    public void loadConfigFile(string filename) 
    {
        if(string.IsNullOrEmpty(filename))
            throw new System.ArgumentException("You must specify a filename");

        try 
        {
            configData.Load(filename);
        }
        catch(Exception ex)
        {
            throw new Exception("Config file could not be loaded",ex);
        }
    }

它将配置文件加载到私有(private)字段中 - 需要保持私有(private),以便开发人员不会直接修改值。相反,修改将通过 setConfigValue 和 getConfigValue 方法完成(我认为这需要单独测试)。

鉴于此,我将如何测试 loadConfigFile 是否确实有效?因为我无法访问私有(private) configData 字段。

最佳答案

configData 在该类的其他地方使用?

如果,比方说,你有这样的方法

public string GetValue()
{
    return configData.GetsomeDataFromThis;
}

那么我建议你做一个这样的测试:

public void ReadValueFromLoadedConfigData()
{
    // Arrange.
    const string ExpectedValue = "Whatever";

    var sut = new ConfigFile();

    sut.loadConfigFile(@"C:\PathToTheConfigFile");

    // Act.
    string actual = sut.GetConfigValue();

    // Assert.
    Assert.AreEqual(ExpectedValue, actual);
}

在您的测试中,尝试只测试公共(public)交互,因为深入到类中,必须读取私有(private)字段的值,这意味着您的类对测试不友好。

关于c# - 单元测试 void 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26887516/

相关文章:

c# - GetConsumingEnumerable() 生产者-消费者的多线程 BlockingCollection 替代方案

c# - 打印时如何确定字符串的宽度?

c# - GetHashCode 扩展方法

c# - 将 CSV 文件从 Angular7 传递到 MVC .Net Core

angularjs - 如何测试 Angular 事件?

android - 如何在创建 Activity 之前模拟方法?

c# - 错误 "the action was blocked by organization policy ms office 2016"

c# - 您如何测试执行文件 IO 的代码?

node.js - 我怎样才能让 mocha 单独运行我的测试?

java - 使用 C++ 单元测试框架集成测试 Java 应用程序