代码之家  ›  专栏  ›  技术社区  ›  Jared

测试ASP。网络数据驱动应用程序

  •  2
  • Jared  · 技术社区  · 17 年前

    我正在考虑设置单元测试和集成测试,但我遇到了web.config中的连接字符串不可用于测试的问题。我们提出的解决方案是使用另一个连接字符串进行测试,但我想知道是否有更好的方法。

    问题的另一半是设置和删除测试数据库。现在我们只有一个巨大的测试,在运行前设置数据库,然后在运行后将其拆除。这样我们就可以控制测试运行的顺序,以确保结果正确。

    只是想看看是否有更好的方法/工具来测试ASP。网络应用程序。

    3 回复  |  直到 17 年前
        1
  •  1
  •   pkaeding    17 年前

    实际上,如前所述,在没有数据库交互的情况下模拟和使用存根来测试系统交互是很好的,但集成测试可能只是一种有效的方法。

    您提到的关于编写数据库表和数据的脚本,然后在所有集成测试之前运行安装脚本,是一种相当明智的方法。

    不知道你有多喜欢ORM,但使用NHibernate,你可以从映射重建表。重建数据库后,我通常只需要一个脚本来物理创建对象并通过NHibernate持久化它们。我知道这不是最好的方法,但我通常会发现我需要的启动测试数据量并没有那么大,而且通过NHibernate插入也是一个测试本身:-)。

    我从来没有用过 Fitnesse 正如“迈克·斯科特”所提到的,但我听到了一些好消息,而且看起来确实很有趣。它也被推荐在臭名昭著的 Billy McCafferty 本文简要介绍了一些伟大的通用开发最佳实践,如单元测试、ddd、契约式设计等。。

        2
  •  0
  •   JoshBerke    17 年前

    建议的方法是构建您的系统,使您可以在没有DB的情况下测试代码。这对代码视角意味着使用关注点分离。您希望将所有核心业务逻辑与页面分离。你可以使用MVC或MPV模式来实现这一点,如果你做得好,你可以找到很多关于它的东西。

    现在有ASP。Net MVC;MVC模式已被应用于ASP中。Net早在这个框架存在之前就已经存在了,所以如果你想增强现有的web表单应用程序,一定要确保你最终不会看到最近关于ASP的热门话题。Net MVC作为ASP.Net中的编程模型。网。

    现在,假设您已经将处理按钮点击的核心逻辑与页面隔离开来,所以您有一个类,我们称之为WidgetController。小部件控制器可能有一个HandleClick()方法来执行您的业务逻辑。

    让我们进一步假设您的业务逻辑需要数据访问。你可以再次使用关注点分离。你的业务逻辑不应该关心如何访问数据库,它所需要的只是让另一个类获取数据。一种流行的数据分离方法是使用离散注入或控制反转模型(分别为DI、IoC)。本质上,你所做的就是为你的数据访问定义一个接口,你的控制器将根据该接口进行编程。然后,您在运行时通过某种方法(属性、构造函数等)向控制器提供实际的类

    这样做的作用是,它允许您在运行时提供MOCK实现,从而分离您的数据库。模拟将实现您的接口,您只需新建测试所需的对象即可将其存储在内存中。

        3
  •  0
  •   Mike Scott    17 年前

    在单元测试中,隔离数据访问代码并对其进行抽象(通常使用接口,例如 repository pattern )这样在单元测试中就不会有任何数据库代码。相反,使用模拟框架(例如。 Moq ).这样,你的测试就会运行 快速的 ,这是确保您经常运行所有测试所需要的。

    当你需要测试整个系统,包括数据库时,你正在做 集成测试 为此,请看 Fitnesse 有一个 good book on it .