对于单元测试,你不应该测试私有方法,是的,但是对于集成测试(使用像MSTest或NUnit这样的单元测试框架),我非常希望对测试网址运行内部API调用,以确保当第三方API供应商更改其后端时,当前代码有效。
鉴于系统的复杂性(愚蠢的API有数百个参数),我将其大部分隐藏在接口和IoC之后,API辅助类完全在我们的数据层库内部。我不想改变它,因为它曾经是公开的,我们发现这个奇怪的开发人员是项目的新手并且缺乏经验将会立即继续并直接从网站代码调用api。使类内部应该确保它们至少在破坏我们的抽象层之前进行思考。
我一直在构建大量的反射代码以获取内部方法,但它运行得不太好并且正在获得sphagetti-ish。有没有办法让这些方法对某些库公开可见?有没有办法让测试库将自己视为包含api的库的一部分?这是最好的做法吗?
答案 0 :(得分:6)
InternalsVisibleTo attribute是你的朋友在这里=)如果你将它放在AssemblyInfo.cs中(至少我通常把它放在那里)并指定你想要的测试/其他程序集的名称公开内部方法,然后它们可用。额外的好处(至少在我看来)是Visual Studio的intellisense系统/编译器知道属性及其目的,你将为内部方法提供完整的智能感知。
与反射不同,每当您更改内部方法签名时,如果不提供编译时错误,它就不会崩溃。