我知道您可以通过检查其效果来对 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/