我有一个类进行复杂的科学计算。它被设置为只允许用户创建一个正确实例化的案例。然而,要正确测试代码,需要直接设置内部状态变量,因为引用文档在其测试用例中提供了此数据。但是,如果操作不当,它可能会使状态无效。
所以我必须有能力,一个成员函数,从单元测试程序中设置内部变量。但我想强烈劝阻普通用户不要调用这个函数。 (是的,一个坚定的用户可以搞砸任何事情......但我不想宣传有办法做一些错误的事情。)
例如,如果能够告诉 Intellisense 不显示该函数,那就太好了。
我目前拥有的最佳解决方案是将函数命名为:DangerousSet()。
我还有哪些其他选择?
跟进
我发现 Amy B 的回答对我的情况最有用。谢谢!
Mufasa 关于使用反射的建议很棒,但(对我而言)更难实现。
Chris 关于使用装饰器的建议很好,但没有成功。
BFree对XML的建议也不错,已经在用了,但并没有真正解决问题。
最后,BillTheLizard 的建议,问题出在源文件中,这不是我能控制的。国际专家出版高技术书籍和期刊文章供他们的社区使用。他们没有解决我的特殊需求这一事实是生活中的事实。根本没有替代文件。
最佳答案
您可以使用 InternalsVisibleToAttribute将内部成员标记为对您的测试程序集可见。在这种情况下使用它似乎很闪耀,尽管它并不完全是“ friend ”。
将您的
DangerousSet
函数标记为internal
而不是public
。在包含
DangerousSet
的项目的 Properties\AssemblyInfo.cs 中:[assembly:InternalsVisibleTo("YourTestAssembly")]
如果出于某种原因有两个测试程序集,则语法为:
[assembly:InternalsVisibleTo("TestAssembly1"),
InternalsVisibleTo("TestAssembly2")]
关于c# - 隐藏函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/167760/