Unit testing focuses on testing individual software modules to uncover errors. Integration testing tests interfacing between modules incrementally to isolate errors. Testing objectives are to find errors, use high probability test cases, and ensure specifications are met. Reasons to test are for correctness, efficiency, and complexity. Test oracles verify expected outputs to increase automated testing efficiency and reduce costs, though complete automation has challenges.