你在哪里把私人函数的单元测试放在C#类中?你在哪里把私人方法的单元测试?
- 把测试在同一个班,他们正在测试
- 使用部分类
个人成员,这些方法都似乎是适当的,和我更愿意将单元测试放在一个单独的项目中。
对此有何看法?
(我知道有关于是否私有方法应该在所有被测试的辩论相当数量的。我想听到争论的双方。)
你在哪里把私人函数的单元测试放在C#类中?你在哪里把私人方法的单元测试?
个人成员,这些方法都似乎是适当的,和我更愿意将单元测试放在一个单独的项目中。
对此有何看法?
(我知道有关于是否私有方法应该在所有被测试的辩论相当数量的。我想听到争论的双方。)
私有方法不一定需要直接测试。您可以根据利用这些私人方法的公共方法的测试来确定其有效性。
然而,你应该小心,以确保您的公共方法可以轻松地将模拟依赖到你的私有方法,以方便测试和模拟所有合理的方案。
编辑:至于你的其他测试应该在哪里,我建议在你的项目中的一个单独的子目录来处理你的测试。在为PHP应用程序编写测试时,我的项目根目录中有测试目录,其目录结构与我的真实应用程序目录结构相同。其中,我为每个真实课堂都有一门测试课。
只是不释放到生产时你的项目的其余部分编译你的测试类(或类似PHP的语言interpretted的情况下,不部署测试类生产Web服务器)。
您的问题标题和第一句是不同的。 :)
我不确定放置测试的位置。这将取决于语言和C#不是我熟悉的,但我想你的代码的很大一部分是私有方法。如果没有测试,我会感到不舒服。代码覆盖率会下降很多。
对此感到抱歉,我编辑了标题。 – Jonathan 2010-01-10 03:43:51
绝对是的。无论如何都应该测试私有方法。和mbunit单元测试框架可以访问私有成员。
看到这个博客: testing private methods
不要单元测试私有方法。单元测试用于测试类的可见(如此公共和受保护的)接口。私有方法是实现细节,为它们编写单元测试是不必要的(它们的行为应该通过对可见方法的测试隐式测试),导致脆弱的测试(因为实现细节可能会改变),并且是重构的障碍。
如果你有,你觉得你需要进行单元测试的私有方法,这是一个很大的提示,也许它应该被分解成另一个类的公共方法。
你在哪里把私人函数在C#类的单元测试?
无处。他们不存在。
一般来说,我的单元测试是在单独的项目中。
这指出了测试的目的:测试说“你的对象工作正常”,它是:“你的对象的公共接口工作正常”。如果事实上你的私有方法的原因是公共方法,那么它们必须只存在于为公共方法实现某些东西。所以如果你测试公共方法,你正在测试私有方法。测试驱动开发说:如果你想做一些事情写下测试,然后执行它。这样你只需要编程公众就可以了。私人方法将遵循相同的政策。 – helios 2010-01-09 18:01:05
是只有一个构造函数和私有方法没有用于单元测试的类? – 2010-03-25 14:08:29
感觉“我需要测试这个私有方法”可能表明代码需要重构,私有方法中的功能应该移到其他类中,并以公共方法公开。 – 2013-06-18 08:21:50
我们在Visual Studio中使用私有访问器来测试私有方法。这意味着测试类可以存在于一个单独的项目中。
然而,我们尽量要真正限制这些,因为数字:
我也个人喜欢在单独的项目中进行单元测试。 如果你想单元测试一个私有方法,你可以改为私有方法。然后,您可以看到内部方法,你的单元测试通过直接添加以下到AssemblyInfo.cs中呼吁:
[assembly: InternalsVisibleTo("MyAssembly.UnitTests")]
+1,但我认为最好只测试公共I/F。 – kenny 2010-01-09 18:40:59
我同意私有方法不应该被测试,一般来说,因为你应该只测试公共接口。
话虽这么说,是有原因的,你可能想测试私有方法:
您正在使用TDD,你必须制定一个复杂的私有方法。为私有方法创建测试方法可能是必要的,以保持您的写测试代码 - 测试周期的正确粒度。
您可能是团队的一员,其他人可能需要修改私有方法,并且希望测试确保更改不会产生问题。
一些解决方案:
声明一些方法,这些方法公众代表对私有方法和只用于测试目的。这些可以作为例如前缀。与TestFoo1,TestFoo2等
使用内部
http://msdn.microsoft.com/en-us/library/7c5ka91b(VS.80).aspx
你应该为你做什么工作;这里是什么适合我:
我的单位是一类:这就是我想要测试。不是一种方法。我试图做面向对象编程,所以我把注意力放在对象上。
如果我发现自己试图测试一个私有方法,我需要重构。我只想直接测试一个私有方法,因为它和测试之间的代码太多了,而且私有方法本身足够复杂,需要测试注意。所以,我通常会通过提取类来将该私有方法和其他相关成员拉入新类。
我的班级倾向于相当小。他们很容易阅读和理解。当然,我的方法也很小,很容易理解。
转换到这种工作方式需要我重新思考许多关于编程的假设和习惯。曾经看起来很激进的现在看来很平常。
+1,如果您想要测试私有方法,您(可能)需要重构。 – 2010-01-09 18:24:32
我认为把测试代码放在生产代码中是一个坏主意。 – Benny 2010-01-09 18:25:38
您使用哪种测试框架(如果有)? – 2010-01-09 21:38:28