0

我写了一个桌面应用程序,它基本上是数据库的前端。它用于创建、读取、更新不同链接对象的操作,并执行一些简单的计算和数据聚合。遵循 MVVM 模式是为了简化测试。今天早上我尝试编写第一个测试,并意识到它并不像预期的那样简单。单元测试非常适合检查单个操作的结果,但不幸的是我必须处理链接在一起的复杂对象。我会尝试更好地解释我的问题。1) 我可以创建和测试 A 类的对象。如果我重复测试 100 次,我的数据库就会被污染。我需要自动程序来清洁它。2) B 类的对象需要 A 类的对象进行某些操作。我认为编写一个同时创建对象 A 和 B 的测试不是一个好主意。

我切换到了 Visual Studio 2012 Express,因为它对单元测试有基本的支持,但我需要一些关于如何更好地使用它来满足我的特殊需求的指南。

谢谢菲利波

4

1 回答 1

1

为“遗留”代码(没有单元测试的代码)编写单元测试可能非常困难。

问题是单元测试就是完全隔离地测试单个类,而不依赖于其他代码。

例如:

public class MyMVVMClass
{
    public void CreateComplexObject()
    {
        var myDatabaseObject = new MyDatabaseObject();
        myDatabaseObject.DoSomethingComplexWithTheDatabase();
    }
}

这个小代码示例不可能进行单元测试,因为它依赖于可访问的真实数据库。这类测试称为集成测试。它们很重要并且肯定有它们的用途,但它们不是单元测试。

可用于改进代码可测试性的主要模式之一是控制反转。这意味着您通过使用一些管理这些依赖项生命周期的容器对象将依赖项注入到一个类中。

在您的单元测试中,您可以使用诸如Moq之类的工具来伪造这些依赖项并使它们易于测试。

前段时间我写了一篇关于这个的文章,其中更深入。也许它可以提供帮助:单元测试,地狱还是天堂?

于 2012-10-29T13:00:46.960 回答