1. Testing object-oriented programs presents unique challenges compared to procedural programs due to features like encapsulation, inheritance, and polymorphism. The basic unit of testing for OO programs is the class, not individual methods.
2. Inherited methods may need to be retested in subclasses to ensure correct behavior given the new context. Overridden methods also require retesting. Deep inheritance hierarchies can weaken encapsulation and reduce testability.
3. Encapsulation hinders testing by preventing access to attribute values, requiring workarounds like state reporting methods. Regression testing is especially important for OO code due to changes potentially affecting many subclasses.