在VS2012中对dotnet进行单元测试的最佳选择?

cha*_*y's 2 c# unit-testing

在阅读本网站上关于该主题的几个主题后,我得出以下结论:

要测试私有方法,有两个选择:

  • 使用PrivateObject但是在进行大量测试时,VStudio 2012的测试工具很糟糕,建议使用NUnit但是PrivateObject使用的命名空间与NUnit for Asserts的命名空间相冲突,因此,应该避免使用.

  • 转换受保护成员(属性+方法)中的所有私有成员,并使包装类继承测试的类并通过公共方法调用受保护的方法.

第二个选择是有效的但是在我看来,由于测试驱动的原因而打破OO封装非常尴尬.

我不是要讨论是否应该测试私有方法(在其他线程中已经讨论过),或者使用其他工具,或者保护VStudio(idem).

我宁愿听到你关于牺牲OO原则而不是可测试性的意见.

谢谢.

aia*_*tag 5

我无法理解为什么要测试私有方法.在我最诚实的意见中,你不应该仅仅为了测试私有方法而违反你的OO原则.为什么?因为您可能会破坏某些功能/体系结构或更糟糕,通过增加您应该是私有方法的可见性危害安全性.

只有暴露的API(公共)才应进行单元测试.因为这些方法是唯一可以在任何地方访问的方法.这些公共方法使用私有的东西.这些方法代表您的业务流程API.因此,仅测试公共方法是有意义的,因为这些方法将是外部可以访问的方法.

同样,在测试公共方法/公开API时,公共方法最有可能使用的私有方法应该已经在单元测试范围内.

我至少在OO范式的角度讲.当然,有些论点认为单元测试更适合于程序/模块化范例,因为单元测试通过其纯粹的定义来测试系统的每个单元.

  • 我想说任何包含业务逻辑的东西都应该进行单元测试,无论是私有的还是公开的.如果要触摸某些代码并对您的系统产生影响,您需要确保它能够正常工作.虽然我确实同意通常使用具有业务逻辑问题的私有方法通常会导致设计错误或代码异味,并且应该转移到别处以进行模拟. (2认同)