我写了一个桌面应用程序,它基本上是数据库的前端。它用于创建,读取,更新不同链接对象的操作,并执行一些简单的计算和数据聚合。遵循MVVM模式以简化测试。 今天早上我尝试编写第一个测试并意识到它并不像预期的那样简单。 单元测试非常适合检查单个操作的结果,但遗憾的是我必须处理链接在一起的复杂对象。 我会尝试更好地解释我的问题。 1)我可以创建和测试A类的对象。如果我重复测试100次,我的数据库就会被污染。我需要自动程序来清理它。 2)对于某些操作,B类对象需要A类对象。我不认为编写一个创建对象A和B的测试是个好主意。我认为正确的方法是使用在第1点创建的对象作为此测试的先决条件。
我改用了visual studio 2012 express,因为它对单元测试有基本的支持,但我需要一些如何更好地使用它来满足我的特殊需求的指南。
由于 菲利普
答案 0 :(得分:1)
编写“遗留”代码的单元测试(没有单元测试的代码)可能非常困难。
问题在于单元测试完全是在完全隔离的情况下测试单个类,而不依赖于其他代码。
例如:
public class MyMVVMClass
{
public void CreateComplexObject()
{
var myDatabaseObject = new MyDatabaseObject();
myDatabaseObject.DoSomethingComplexWithTheDatabase();
}
}
这个小代码示例不可能进行单元测试,因为它依赖于可访问的真实数据库。这种测试称为集成测试。它们很重要,肯定有它们的用途,但它们不是单元测试。
可用于改进可测试性代码的一个重要模式是Inversion Of Control。这意味着您可以通过使用管理这些依赖项生命周期的容器对象将依赖项注入到类中。
在单元测试中,您可以使用Moq之类的工具伪造这些依赖项并使其易于测试。
前段时间我写了一篇关于这篇的文章,这篇文章更深入。也许它可以提供帮助:Unit Testing, hell or heaven?