所以我知道TDD你应该首先编写测试,但是我不能理解如何为下面的代码编写测试。有人可以在起点帮助我吗?
private string GetWMIProperty(string property)
{
string value = string.Empty;
SelectQuery selectQuery = new SelectQuery("Win32_OperatingSystem");
using (ManagementObjectSearcher searcher = new ManagementObjectSearcher(selectQuery))
{
foreach (ManagementObject mo in searcher.Get())
{
value = mo[property].ToString();
}
}
return value;
}
答案 0 :(得分:6)
你只是为方法的各种结果编写测试,这样你就可以定义方法的预期行为而不用实际编写方法:
[TestMethod]
public MyClass_GetWMIProperty_GivenGoodInput_ReturnsString()
{
var myClass = new MyClass();
var result = myClass.GetWMIProperty("goodinput");
Assert.IsNotNull(result);
}
[TestMethod]
public MyClass_GetWMIProperty_GivenNullInput_ThrowsArgumentNullException()
{
var myClass = new MyClass();
try
{
var result = myClass.GetWMIProperty(null);
}
catch (ArgumentNullException)
{
// Good
return;
}
// Exception not thrown
Assert.Fail();
}
[TestMethod]
public MyClass_GetWMIProperty_GivenBadInput_ReturnsNull()
{
var myClass = new MyClass();
var result = myClass.GetWMIProperty("badinput");
Assert.IsNull(result);
}
您的方法将如下所示:
// Note public/internal so tests can see it
public string GetWMIProperty(string property)
{
// Stubbed
throw new NotImplementedException();
}
这三种测试方法在这种状态下都会失败,因为NotImplementedException
将被抛出而不会被其中任何一种捕获。
接下来,您将编写方法的实际内容,以便您可以在这些测试中调用它们,它们都会通过。 TDD的核心思想是测试定义行为。我们在这里定义了: