我使用单元测试向导在我的解决方案中创建了一个单元测试:我选择了类及其所有方法和属性,然后向导为每个类创建了一个包含测试方法的新文件测试方法。
显然,测试应该是可靠的,也就是说,只有当模块没有按预期工作而不是因为测试构建不当时,测试才会失败。因此,第一个问题是:构建测试应遵循哪些准则?
在创建我的第一个测试时,我试图编写简单的测试用例,从而减少出错的可能性:例如,要测试一个集合,您需要向它添加一些元素,所以我创建了一个私有(private)方法,例如以下是我的测试单元:
// This is not a test method, but a support method for the test methods.
private void AddSomeElements(ICollection c, int count)
{
Random rand = new Random();
...
for(int i=0; i < count; i++)
c.Add(...);
}
因此,例如,Count
属性的测试可以是:
/// <summary>
///A test for Count
///</summary>
[TestMethod()]
public void CountTest()
{
HostsCache target = new HostsCache();
AddSomeElements(target, 100);
int actual;
actual = target.Count;
Assert.AreEqual<int>(100, actual);
}
这种方法是否正确?
假设 Add
方法返回一个值(例如一个 bool
值):在这种情况下,上面的私有(private)方法是否也应该返回这个值?
最佳答案
我在编写测试时遇到的最大错误之一是忘记将测试视为一流代码。也就是说,将它们分解为易于维护和修改的方式,因为您的应用程序(以及,通过扩展,测试)的发展。
我见过的第二大错误是在每个测试中覆盖了太多代码。理想情况下,每个测试应该只测试几行代码。绝对不会比单个方法中包含的代码更多。
因此,如果您的示例中的 AddSomeElements
返回某些内容是有意义的,请让它返回一些内容。如果没有,就不要。
只要记住两件事:
- 您的测试是一流的代码
- 每个测试都应该只测试很小的一部分功能。
关于c# - 创建和运行测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9318712/