将单元测试写入组件或单独的组件中?

时间:2008-11-07 11:26:10

标签: c# unit-testing

编写单元测试时,是否将测试放在要测试的组件内或单独的测试组件中?我已经在一个单独的程序集中编写了一个带有测试的应用程序,以便于部署,因为我可以排除程序集。有没有人在你想测试的程序集中写那些测试,如果有的话,它的理由是什么?

5 个答案:

答案 0 :(得分:11)

我有一个带有接口项目,测试项目,域项目和数据项目的解决方案。当我发布时,我只发布了一个接口,它没有引用测试,因此它不会被编译。

编辑:最重要的是你不希望它成为你最终版本的一部分。您可以使用单独的项目/程序集在VS中自动实现此目的。但是,您可以在同一个程序集中使用它,但如果您使用的是nant或msbuild,则不要编译该代码。虽然有点乱,但保持整洁,使用单独的组件:)

答案 1 :(得分:10)

这在网络上受到广泛争议。

我们使用单独的程序集和InternalsVisibleTo属性来帮助测试程序组件查看测试程序集的所有内部结构。我们倾向于为我们正在测试的每个组件制作一个测试组件。

答案 2 :(得分:10)

我想说,在您的最终部署中,您唯一想要合并任何测试代码的时间是用于监控和控制应用程序的测试代码。

将测试代码留在部署中:

  • 使代码无法充分利用 - 所有额外的代码标记都不会在原地使用。
  • 影响发布 - 您是否发布了完整应用的新版本。当你改进的只是在测试代码中,例如由于修复了错误而扩展了测试套件。
  • 您不能轻易地在另一个项目上重用测试框架 - 如果您总是发布被测试代码阻塞的应用程序,则任何后续项目都必须重用相同的测试代码。否则,您最终会遇到应用程序A正在使用测试平台的v1.2来应用这些方面的情况。在您的所有应用中都很常见,例如表示层,或业务逻辑框架等。和应用程序。 B正在使用测试框架app的v1.1。 C正在使用v1.2.1等

另一方面解耦允许您:

  • 根据需要轻松升级和扩展测试套件。
  • 轻松地在多个项目中重用测试套件。
  • 在多个项目中使用通用测试框架。

HTH

欢呼声,

罗布

答案 3 :(得分:5)

在另一个装配中。否则你的程序集将引用测试框架(例如Nunit.Framework.dll),你需要在客户机器上安装它,

即使您发布的是库,并且您希望您的客户将单元测试视为示例或关于如何使用您提供的对象的具体说明,包含在生产装配中的优势也很小。 / p>

答案 4 :(得分:0)

您可以将它们保存在解决方案中的单独程序集中,稍后ILMerge它们以进行调试,并且不要ILMerge它们以便发布。