将unit testing写入assembly或单独的assembly中?

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

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

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

这在全网广泛争论。

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

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

将测试代码留在部署中:

  • 膨胀代码根本没有真正的优势 – 所有额外的代码标记都不会在原地使用。
  • 影响发布 – 您是否发布了完整应用的新版本。 当您改进的仅在测试代码中时,例如,由于错误修复而扩展了测试套件。
  • 你不能轻易地在另一个项目中重用测试框架 – 如果你总是发布被测试代码堵塞的应用程序,那么任何后续项目都必须重用相同的测试代码。 否则,您将完成应用程序A正在使用测试平台的v1.2来应用这些方面的情况。 这在您的所有应用程序中都很常见,例如表示层或业务逻辑框架等。而且应用程序。 B正在使用测试框架app的v1.1。 C正在使用v1.2.1等。

另一方面解耦允许您:

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

HTH

干杯,

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

即使您发布的是库,并且您希望您的客户将unit testing视为示例或关于如何使用您提供的对象的具体说明,在生产assembly中包含的内容也很少。

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