如何测试私有函数或具有私有方法,字段或内部类的类?
如何对具有内部私有方法,字段或嵌套类的类进行单元测试(使用xUnit)? 还是通过 内部链接 (在C / C ++中为 static )或在私有( 匿名 )名称空间中使其私有化的函数? 仅仅为了能够运行测试而更改方法或函数的访问修饰符似乎很糟糕。 #1楼 过去,我曾使用 反射 来为Java执行此操作,我认为这是一个很大的错误。 严格来说,你 不 应该编写单元测试直接测试私有方法。 您 应该 测试的是该类与其他对象之间的公共合同; 您永远不要直接测试对象的内部。 如果另一个开发人员想要对该类进行小的内部更改,而不影响该类的公共合同,则他/她必须修改您基于反射的测试以确保它可以工作。 如果您在整个项目中重复执行此操作,则单元测试将不再是对代码运行状况的有用衡量,并开始成为开发的障碍和开发团队的烦恼。 我建议做的是使用诸如Cobertura之类的代码覆盖工具,以确保您编写的单元测试以私有方法提供对代码的适当覆盖。 这样,您可以间接测试私有方法的功能,并保持更高的敏捷性。 #2楼 今天,我推出了一个Java库来帮助测试私有方法和字段。 它的设计考虑了Android,但实际上可以用于任何Java项目。 如果您使用私有方法或字段或构造函数获取一些代码,则可以使用 BoundBox 。 它确实满足您的需求。 以下是一个测试示例,该示例访问一个Android活动的两个私有字段进行测试: