关于this question我之前提到的问题,我的单位测试再次陷入困境。
我当前的问题与测试抽象protected
类的Component
方法有关。
我已成功实现了一个名为ConcreteComponent
的模拟类,它可以很好地继承抽象类的所有内容。
事实是,我在我的单元测试文件中创建了这个具体的类。测试受保护方法的唯一方法是使用私有访问器。但是,我无法在与单元测试相同的文件中创建私有访问器,因此无法访问受保护的方法。
我试图将模拟具体类放在一个单独的文件中,在不同的命名空间下,现在这允许我创建一个单元测试文件现在可以使用的私有访问器。它工作得很好,但后来我想在单元测试所在的同一个文件中需要这个模拟具体类。
所以现在我有两个问题:
1)此问题可能的解决方法是什么?
2)为什么我不能为与单元测试类位于同一文件和命名空间内的模拟类创建私有访问器?
答案 0 :(得分:2)
您可以查看PrivateObject课程,以便在测试中访问您班级的非公开API。它在内部使用反射。类的受保护资产仍然是外部客户端的api,在这种情况下是外部客户端或子类或派生类。所以测试这种api的愿望是可以理解的。我不建议仅为了测试受保护的api而污染一个类来公开public api。但是,因为在您的情况下派生类是在测试项目中,您实际上可以提供公共API以使测试更容易并提高性能(反射将更慢,如果您正在运行测试,连续测试,当您进行代码更改时,它可能会使测试运行速度变慢,具体取决于测试次数等。)。
答案 1 :(得分:0)
受保护的功能是因为您不希望将其公开给您的客户端。但如果它受到保护,那么可以通过公共接口通过一些令人满意的条件访问,如果不是那么它是一个死代码,所以删除它。
所以黄金法则是
1-不要试图通过使用技术(反射等)来规避测试私有/受保护的方法,尝试通过公共接口进行单元测试私有/受保护以及BTW为什么要使用VS 2008测试,为什么不使用NUnit