当您使用成分,那么你可以模拟从你的类被测依赖于其他对象,但是当你使用继承,你不能嘲笑的基类。 (或者你能吗?)
我一般都尽量倾向于组成了继承 ,但有时确实继承好像这个职位的最佳工具-好吧,至少直到它的单元测试。
那么,你怎么测试继承? 或者你只是垃圾作为不可测和使用成分呢?
注:我主要使用PHP和PHPUnit的,所以在那边帮助最赞赏。 但是,这也将是有趣的知道是否有其他语言这个问题的解决方案。
当您使用成分,那么你可以模拟从你的类被测依赖于其他对象,但是当你使用继承,你不能嘲笑的基类。 (或者你能吗?)
我一般都尽量倾向于组成了继承 ,但有时确实继承好像这个职位的最佳工具-好吧,至少直到它的单元测试。
那么,你怎么测试继承? 或者你只是垃圾作为不可测和使用成分呢?
注:我主要使用PHP和PHPUnit的,所以在那边帮助最赞赏。 但是,这也将是有趣的知道是否有其他语言这个问题的解决方案。
使用一套单元测试,反映了类层次结构。 如果你有一个基类基类和派生派生类中,则有测试类BaseTests并从DerivedTests的。 BaseTests负责测试的基本定义的一切。 DerivedTests继承了这些测试,并且还负责在派生测试一切。
如果你想测试在基地受保护的虚拟方法(即碱及其派生类之间的接口),它也可能是有意义的做一个测试,仅派生的类测试该接口。
只要你不重写父类的公共方法,我不明白为什么你需要测试他们对所有的子类。 单元测试父类的方法和测试只有新的方法或在子类中被覆盖的人。
您在成分使用模拟对象的原因是,如果真正的对象做一些你不想设置(如使用的插座,串口,获取用户输入,检索庞大的数据等)。 你应该总是在可能使用真实对象。 Mock对象只对当预计的努力实现和维护使用真实对象的测试是大于,要实现和使用模拟对象保持一个考验。 你的基类不应该做任何幻想这样的!
所以你不要有测试继承。 大概你正在使用的基类的行为,所以只是测试的派生类中,你通常会 - 调用基类和派生类为适用于这两种测试方法上。 这确保了派生类的所有预期行为测试。
从本质上讲,(大部分时间),你测试一个派生类仿佛基类是不可见的。
为什么要嘲笑的基类?
如何创建派生类从一个不存在的父类?
只是测试它像往常一样,但有父类。
我想你还没有告诉整个故事。
此外,语言特征理应工作(除非你用的测试版本或使工作),所以你不需要测试方法是否在派生类中实际存在。
不,你不知道。 你只需要检查被覆盖的方法做他们应该。 它绝不应影响您的父方法的行为。 如果你的父母方法开始失效,那么就意味着你在母公司层面进行测试时,他们错过了约束条件。