[英]Unit testing a void method
我了解您可以通过检查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);
}
}
它将配置文件加载到私有字段中-需要将该私有文件保持私有状态,以便开发人员不直接修改该值。 而是通过setConfigValue和getConfigValue方法(我认为需要单独测试)来完成修改。
鉴于此,我将如何测试loadConfigFile实际起作用? 由于我无法访问私有configData字段。
在该类的其他地方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);
}
在测试中,请尝试仅测试公共交互,因为深入该类,因为必须读取私有字段的值,这意味着您的课程不友好。
您基本上可以测试getConfigValue
返回从文件加载的值。
仅仅因为在其他测试中测试了setConfigValue
/ getConfigValue
并不意味着您不能在针对loadConfigFile
的测试中使用它们。
顺便说一句,我强烈建议您遵循.NET命名约定,以大写字母开头的方法名称。 (我也敦促您将您的领域设为私有而非内部...)
单元测试从根本上说“给出了这个输入,确认了这个事情发生了”,但是并不能代替验证您的应用程序处于有效状态。
在此示例中,如果不满足前提条件,或者装入操作失败,则loadConfigFile方法将引发异常。 然后,这将在单元测试中检测到,这将失败。
如果配置上还需要其他任何验证,则不会引发任何异常,这应在类本身中处理。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.