C# 有效地进行单元测试/是否有人尝试过组装方法?

C# 有效地进行单元测试/是否有人尝试过组装方法?,c#,unit-testing,C#,Unit Testing,我正试图将单元测试重新引入到我的团队中,因为我们目前的覆盖率非常低 我们的系统相当大,有40多个项目/组件。我们当前使用一个名为[SystemName].Test.csproj的项目。所有测试代码都被转储并组织起来,以使用文件夹表示名称空间。这种方法的可扩展性不强,很难找到测试 我一直在考虑在每个项目中添加一个Tests文件夹,这将使单元测试“摆在开发人员面前”,并使它们更容易找到。缺点是生产版本代码将包含对nunit、NMock以及测试代码和测试数据的引用。。。。有人尝试过这种方法吗 其他人是

我正试图将单元测试重新引入到我的团队中,因为我们目前的覆盖率非常低

我们的系统相当大,有40多个项目/组件。我们当前使用一个名为[SystemName].Test.csproj的项目。所有测试代码都被转储并组织起来,以使用文件夹表示名称空间。这种方法的可扩展性不强,很难找到测试

我一直在考虑在每个项目中添加一个Tests文件夹,这将使单元测试“摆在开发人员面前”,并使它们更容易找到。缺点是生产版本代码将包含对nunit、NMock以及测试代码和测试数据的引用。。。。有人尝试过这种方法吗

其他人是如何处理大型项目的单元测试的?每个“真实”项目/程序集都有一个测试项目会引入太多的新项目


提前感谢

我个人使用项目内方法。
由于单个项目本身就是一个软件模块(因此可以在其他项目中发布或使用),我认为最好的方法是将测试绑定到单个软件模块上,因此它会自动跟随测试代码。

我认为这是一个坏主意,因为您已经说明了原因,您最终会在生产代码中获得对测试程序集的引用,再加上所有测试都被编译到生产代码中这一事实,除非您使用一些魔法将其排除

你不会说为什么这些测试很难找到。如果它们反映了它们正在测试的东西的结构,那么它们应该不会比它们正在测试的代码更难找到

您应该有一个随时运行所有测试的CI服务器,这样即使测试不在开发人员的界面中,他们也不能轻易地破坏构建


我们倾向于在他们自己的项目中进行测试,但该项目位于他们正在测试的程序集的tests(或tests.Integration或wahat)子文件夹中。这样,当项目的代码被签出并且您没有项目级别的目录结构中的测试项目文件夹时,就可以获得测试。但是,对于您拥有的每个程序集,您最终至少有一个测试项目。我认为这是可以的,除非你有很多小程序集,但是在这种情况下,你真的需要在ide中一直保存所有程序集的代码吗,或者你可以简单地保存你在本地处理的程序集的代码,并让其他程序集被dll引用吗?

我在一个大型项目中工作过(500万行代码,约160000个单元测试),用于将测试类放在每个文件的底部,在一个单独的名称空间中,包装在一个#if DEBUG中

对NUnit的引用存在于生产环境中,但测试代码未包含在发布版本中,因此它不会使生产DLL变得更大

好处是测试代码就在生产代码的旁边,因此找到测试从来都不难。同时也很清楚哪些测试属于哪些类,并且没有必要尝试在测试文件夹中模拟命名空间层次结构,如果命名空间或类名发生更改,这总是一件麻烦的事情

它在这个项目中非常成功,但最近的观点和里程可能会有所不同:)我目前工作的地方的结构与Sam Holder描述的非常相似