unit-testing - NUnit(或 NUnitLite)和 .NET CF 的 "Getting started"问题

标签 unit-testing compact-framework nunit

我有一个现有的 VS 2005 Std .NET Compact Framework 应用程序,我想对其进行一些主要的重构。目前没有单元测试,但我想在弄乱代码之前添加它。我没有单元测试的实践经验,即使我知道这个理论(只是从来没有真正实现它;我知道:真丢脸:-))
以下是我目前正在思考的一些问题:

a) 作为初学者,我应该使用 NUnit 还是 NUnitLite(声称更容易使用)?

b) 我的目标应该是在移动设备上还是在桌面上运行测试(当然,特定于设备的代码除外)?目前桌面看起来更有吸引力,尤其是在自动化构建中包含测试......

c) 我要测试的类通常如何包含在测试项目中?我的应用程序是一个 .EXE 文件,即我不能像测试项目中的 .DLL 程序集一样引用它(或者我可以吗?从未尝试过这个......)。我检查了各种 NUnit 教程,但没有发现任何提及,或者一个教程建议将我要测试的类复制并粘贴到测试项目中(yuk!)。我应该链接到我的测试项目中的原始源代码文件吗?私有(private)方法或对其他类的依赖呢?

d) 我是否应该开始修改我的原始代码以实现更好的可测试性,例如使私有(private)方法公开,解耦等?这有点像在能够测试之前进行重构,这对我来说听起来不太好......或者在开始时根本不接触原始代码是更好的做法,即使这意味着更少的代码覆盖等?

e) 我应该研究大多数人使用的任何其他工具或插件吗?

在此先感谢您的任何答案(如果仅针对上述一项或多项内容,我也很感激答案)。

最佳答案

首先,我推荐你一本关于单元测试的好书:Pragmatic Unit Testing in C# .

它将向您介绍 NUnit,但更重要的是,作者将为您提供很多如何编写的建议 不错一般的单元测试。 xUnit 测试框架不是很复杂,您会很快适应它们的 API/工作流程。具有挑战性的是识别边界条件、减少耦合和设计可测试性的实际过程。它以电子书 (PDF) 或打印版的形式提供。

关于你的实际问题(本书也会给你一些答案):

  • @a)我没有使用 NUnit lite 的经验,因此在这一点上我不能给你任何建议。
  • @b)单元测试在它们的依赖方面应该是非常本地化的。您的目标是测试彼此独立的类,因此无需先将其部署在移动设备上。您不会运行完整的应用程序,只需单独测试组件。因此,我建议使用您的台式机作为单元测试环境的目标。你也会得到更好的周转时间。
  • @c)您必须引用包含要在测试项目中测试的类的程序集。测试项目本身就是一个程序集 (DLL)。测试运行程序执行此程序集并使用存储的元信息来运行包含的测试用例。
  • @d)这在很大程度上取决于您的软件的状态和设计。但总的来说,我会使用分而治之的策略:在类之间引入接口(interface)并开始逐步重构。在开始更改实现之前编写单元测试。接口(interface)使合约保持正常运行,但您可以在必要时更改底层实现。不要仅仅为了使它们可测试而公开私有(private)方法。私有(private)方法是类的内部助手,支持公共(public)方法完成工作。由于您测试了您的公共(public)方法,您将断言您的私有(private)方法做正确的事情。
  • @e) Visual Studio 的一个有用插件是 TestDriven.Net .它允许您直接从 IDE 运行 NUnit 测试,而无需更改为 NUnit 的 GUI 或控制台运行程序。
  • 关于unit-testing - NUnit(或 NUnitLite)和 .NET CF 的 "Getting started"问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/597886/

    相关文章:

    windows-mobile - 通过 ActiveSync 连接时从 windows mobile 获取主机 pc 的 IP 地址

    c++ - 使用 QTestLib 测试文件的打开

    unit-testing - 如何使用 with-redefs 模拟对同一函数的多次调用?

    c# - 在 C# 中从 Internet 下载文件并即时写入的正确方法是什么?

    .net - NUnit 的 Assert.Equals 抛出异常 "Assert.Equals should not be used for assertions"

    .net - 测试状态变化规则

    c# - 如何在我的 C# - NUNIT 项目中使用对象 ConnectionStringSettings 和 ConfigurationManager?

    unit-testing - 有没有办法对副作用进行单元测试?

    angular - 如何使用 Renderer2 测试指令?

    visual-studio - 为什么我的智能设备应用程序会创建 *.asmmeta.dll 文件?