将测试方法放在您正在测试的同一个类中有什么问题吗?

ark*_*ina 7 c# nunit unit-testing

将测试方法放在与您正在测试的类相同的类中是否有任何问题?

因此,将[TestFixture]属性添加到每个类,并将[Test]方法与实际方法一起使用.

我喜欢这个主意.把所有东西放在一个地方.

但是,如果有的话,这是什么缺点?

/我使用Nunit和c#.

Jar*_*Par 20

是的,这是一个需要避免的模式.至少出于以下原因,测试应与您的运输代码完全分开

  • 在单独的程序集中进行测试有助于确保您拥有可用的API,因为它们无法通过private/ protected构造作弊.相反,他们被迫通过公共API点
  • 在同一个程序集中进行测试意味着您的生产代码还包含您的测试代码.没有理由将代码发送给他们实际上不会使用的客户
  • 导致生产代码依赖于他们不需要的程序集(Nunit,xunit等...)
  • 许多测试框架都要求测试方法公开,因此它会将测试推送到API的公共表面.
  • 将它们放在同一个组件中会打开生产代码的大门,意外地调用测试代码,从而在生产环境中弹出有趣的断言


RQD*_*QDQ 8

这种方法激励了我的灵魂.

我认为将测试代码与生产代码分开会更有意义.很多原因:

  • 从理论上讲,您应该在代码的界面进行测试,而不能访问幕后的私有成员.
  • 组织 - 将所有测试都放在一个单独的项目中意味着您的主应用程序不会被测试代码混乱.
  • 这会使您的可交付成果变得臃肿.
  • 将所有内容放在一个地方会使团队更难同时处理代码库(一个人在测试,一个人在代码上等).

最重要的是:

它只是平原感觉/气味错误.


jga*_*fin 6

是.这将打破单一责任原则.它会降低可读性.您将依赖项添加到测试框架中.