我承认 - 在单元测试方面,我是一个完整的新手。我可以很容易地掌握这些概念(测试一件事,破解 - 修复 - 测试 - 重复等),但是我有一个问题让我对这个问题有所了解......
我的任务是重写我们应用程序的大部分内容,并且我已经很好地完成了类结构。我们将测试项目与其他解决方案混合在一起,所有参考文献都按照我们希望的方式排列。不幸的是,有一些Friend类只能从同一个命名空间内访问。就目前而言,测试类不是此命名空间的成员,因此我无法直接访问任何需要测试 REALLY 的基础方法。
从我一直在阅读的内容中,我可以创建一个有问题的类的公共模型并以这种方式进行测试,但是我担心在未来有人会对生产代码进行更改而不是复制它超出测试代码,完全破坏了测试的目的。另一个选择是更改类本身的访问级别,但这将涉及大量开销和摆弄已经存在的代码。编写接口的想法也出现了,但是为了测试而创建一个完整的接口结构并没有在管理中进行。
我在这里错过了一些东西吗?在不改变对它们的访问权限的情况下,确保这些基础类确实正常运行的最佳方法是什么?
答案 0 :(得分:4)
我不确定您是否引用.NET / C#项目,但您可以将InternalsVisibleTo
属性添加到AssemblyInfo.cs文件中,以将internal
类公开给单元测试程序集
假设您创建一个名为“MyApplication.Tests”的单元测试项目,将其添加到“MyApplication”项目AssemblyInfo.cs文件(位于“Properties”下):
[assembly: InternalsVisibleTo("MyApplication.Tests")]
答案 1 :(得分:3)
您还可以创建与test-subject位于同一名称空间中的test-subject的子类,子类可以公开测试所需的任何功能。
假设您有某种方法可以将此子类赋予“测试”范围,那么您就可以免费使用。 (你不需要常规代码中的这个类,因为它打破了封装)
答案 2 :(得分:0)
我认为您的单元测试不应该要求任何源代码,所以第一个答案肯定有效。你考虑过使用Reflection吗?我认为它可以改变源代码;这里有一个很好的讨论:CodeProject