【问题标题】:In C#, what is a good way to improve unit test feedback loop?在 C# 中,改进单元测试反馈循环的好方法是什么?
【发布时间】:2012-01-24 13:48:44
【问题描述】:

在处理较大的项目时,编译和启动单元测试框架可能需要至少 10 秒。有没有减少反馈循环时间的有效方法?我打算在测试运行之间对一个单元测试类和另一个类做一些小的改动。

我考虑了其他一些方法。我看不到任何编译和运行单个测试类和依赖项的方法。我可以增加解决方案中的项目数量,以减少每个程序集的编译时间,但这会导致其他问题。 NCrunch 似乎减少了手动运行测试的需要,但它仍然编译完整的程序集。

澄清: 10 秒包括编译单元测试类和被测类的时间。我对 NCrunch 的问题可能是因为计算机功能较弱。

【问题讨论】:

    标签: c# unit-testing feedback-loop


    【解决方案1】:

    您必须将每个测试类放在单独的程序集中 - 程序集实际上是编译单元。如果在只是更改测试类后重新编译需要 10 秒,这表明您在一个程序集中进行了太多测试,或者您的机器非常慢。获得更好的机器(或使用更多内存或 SSD 改进现有机器)很可能是最好的前进方式。

    我自己使用 NCrunch,虽然它仍然编译完整的程序集,但它在后台执行它的事实意味着,通常当我深呼吸时,测试已经重建并正在运行。如果你有多个处理器和一个 ramdisk,NCrunch 工作得很好,顺便说一下 - 你可以设置它的构建位置,以及它可以使用多少个处理器。

    如果您只考虑过 NCrunch(或The Mighty Moose 等 - 类似的东西)但没有实际尝试过,您应该先试一试,然后再假设它对您来说不够快.

    【讨论】:

    • 我有一点不清楚。 10 秒是在更改正在测试的课程之后。我尝试了 NCrunch,但我认为我的电脑没电了。
    • 我使用 NCrunch,它运行流畅。当然,我有一台最近的电脑和一个 SSD。
    • @BenMaddox:你的机器是什么规格,改进它的现实程度如何?
    • @JonSkeet 这因月而异。迄今为止最好的笔记本电脑是具有 2 个四核、4 GB RAM 和 7200 RPM 硬盘驱动器的笔记本电脑。这些机器属于客户,所以我几乎没有能力改进它们。
    • @BenMaddox:那么可能值得与您的客户提前沟通:“我的编码效率取决于我提供的硬件”。
    【解决方案2】:

    您可以查看AutoTest.Net,它是 Visual Studio 的附加组件,可在您编写代码时在后台运行单元测试。

    通过这种方式,您可以将单元测试更像是编译器错误/警告,并获得相对实时的反馈。

    【讨论】:

      【解决方案3】:

      声明式单元测试可以有效地将编译时间归零,但前提是您的架构允许。例如,将单元测试移至数据库对我们来说在大型项目中效果很好。

      【讨论】:

      • 我仍将对正在测试的类进行更改。我从未考虑过将单元测试移至数据库。
      • 是的,仅添加新测试时会有改进。
      猜你喜欢
      • 1970-01-01
      • 2010-09-21
      • 2012-05-02
      • 2011-01-08
      • 2020-12-26
      • 1970-01-01
      • 2010-09-08
      • 2010-09-07
      • 2019-02-12
      相关资源
      最近更新 更多