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

如何为.NET应用程序创建单元测试?

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

    我是新来的单元测试,但我开始认为我需要它。我有一个asp.net web表单应用程序,它正在不可预见的方向上进行扩展,这意味着某些代码位正在适应多种用途。我需要努力确保在更换这些设备时,不会破坏它们原来的预期用途。那么,我怎样才能最好地将单元测试追溯到现有的代码上呢?谢谢你的实用建议。谢谢

    5 回复  |  直到 12 年前
        1
  •  4
  •   mezoid    17 年前

    非常缓慢!

    我目前正在做同样的事情,我的项目,这是一个很大的努力。为了对现有的类进行单元测试,通常需要对它们进行完全重新设计……而且由于耦合度高,更改单个类可能导致需要在其他几十个类中进行更改。

    最终的结果是良好的干净代码,可以工作,可以扩展,可以验证……但它确实需要大量的时间和精力。

    我给自己买了几本关于单元测试的书,帮助我完成这个过程。

    你可以考虑让自己 xUnit Test Patterns Working Effectively with Legacy Code .

        2
  •  3
  •   Bill the Lizard    17 年前

    在为代码所在的方法编写测试之前,不要更改代码行。我看到人们犯的最大错误是,他们在为类编写测试之前重新设计类,使其更易于测试。这会适得其反,因为你 打破一些东西。

    正确的方法是在更改类之前为它编写一组完整的测试(或方法,粒度级别由您决定)。这些测试是你的安全网,让你自信地做出改变。如果您发现不能为一个类编写测试,可能是因为它与另一个类的耦合太强,那么您的第一组测试应该将两个类放在一起,然后您的下一步应该是分离这些类。

        3
  •  1
  •   Amy B    17 年前

    单元测试的一个不言而喻的好处是它将类设计推向低耦合。如果最后尝试在中添加unittesting,则应做好以下准备:

    • 由于耦合而无法测试单元的情况
    • 重新设计类以消除耦合,如果没有现有的单元测试,这当然是不安全的。

    特别需要注意的是:

    • 创建其他类的类(这里通常是高耦合)。
    • 依赖于单元测试时不存在的基础结构的类,如httprequest和数据库

    编辑

    维基百科解释 Unit Testing :

    单元测试的目标是隔离程序的每个部分,并显示各个部分是正确的。单元测试提供了一个严格的书面契约,代码必须满足这个契约。

    这是关于测试一种方法。这不是测试方法和数据库。您可以执行自动化测试,测试方法和数据库,但这些不是单元测试。

        4
  •  0
  •   annakata    17 年前

    我想建议你 一次添加一个单元测试 以同样的速度修复它们。

        5
  •  0
  •   dotnethaggis    12 年前

    我也面临同样的问题。

    我们决定要做的是一次一个功能。编写测试并分离现有代码。新代码将取代现有的耦合代码。所以基本上我们所做的就是一点一点地重写应用程序。

    请确保单个重写尽可能小,以减少对现有代码的影响。

    确保您理解了您的代码现在和应该做什么,这就指向了需求。在一天结束的时候,尤其是当你沿着TDD路线走的时候。单元测试是您的需求。所以如果你不知道最初的需求,你就不会为你的代码编写正确的测试。

    正如大家所建议的,先编写测试,然后编写代码(tdd)。一旦所有的测试都通过了,就用完全测试的代码替换应用程序中旧的耦合代码。