你在哪里为私人方法进行单元测试?

Jon*_*han 4 c# tdd unit-testing encapsulation information-hiding

在C#类中,将私有函数的单元测试放在哪里?

维基百科一篇文章建议:

  • 将测试与他们正在测试的成员放在同一个类中
  • 使用部分类

就个人而言,这些方法都不合适,我更喜欢将单元测试放在一个单独的项目中.

有什么想法吗?

(我知道关于是否应该对私人方法进行测试存在相当多的争论.我想听听论点的两个方面.)

Mic*_*ssa 14

私有方法不一定需要直接测试.您可以根据使用这些私有方法的公共方法的测试来确定其有效性.

但是,您应该注意确保您的公共方法可以轻松地将模拟依赖项注入到您的私有方法中,以便于测试和模拟所有合理的方案.

编辑:至于你的其他测试应该在哪里,我建议你的项目中有一个单独的子目录来处理你的测试.在为PHP应用程序编写测试时,我在项目的根目录中有一个测试目录,其目录结构与我的实际应用程序目录结构的目录结构相同.在其中,我为每个真实班级都有一个测试课程.

在发布到生产环境时,不要使用项目的其余部分编译测试类(或者在PHP等解释语言的情况下,不要将测试类部署到生产Web服务器).


jas*_*son 9

不要对私有方法进行单元测试.单元测试用于测试类的可见(所以公共和受保护)接口.私有方法是实现细节,并且对它们进行单元测试是不必要的(它们的行为应该通过可见方法的测试进行隐式测试),导致脆弱的测试(因为实现细节可能会改变)并且是重构的障碍.

如果你有一个私有方法,你觉得你需要进行单元测试,这是一个很大的暗示,也许它应该被考虑到另一个类的公共方法中.

在C#类中,将私有函数的单元测试放在哪里?

无处.它们不存在.

一般来说,我的单元测试是在单独的项目中.

  • 这指向测试的目的:测试说"你的对象工作正常",它是:"你的对象的公共接口工作正常".事实上,私有方法的原因是公共方法,因此它们必须存在才能为公共方法实现某些东西.因此,如果您测试公共方法,那么您正在测试私有方法.测试驱动开发说:如果你想做某事写下测试,然后再实现它.这样你只需要对必要的公众进行编程.私人方法将遵循相同的政策. (4认同)

Ada*_*Dev 9

我个人也喜欢在一个单独的项目中进行单元测试.如果要对私有方法进行单元测试,则可以将私有方法设为内部方法.然后,您可以通过将以下内容添加到AssemblyInfo.cs来使单元测试可以看到内部方法以直接调用:

[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]
Run Code Online (Sandbox Code Playgroud)