Aggregation, i.e. points-to, has-a-handle, has more degrees of freedom than composition, i.e. contains.
Things that can go wrong with aggregation: The subobject is destroyed too soon, it leaks, the link was never established, another object thinks it has exclusive ownership and modifies it.
Typically composition is easier for the compiler to check (such as in C++) and easier for you to check as well, as there are fewer possible uninitialized states and fewer possible means of corruption.
In general, prefer composition.
Edit: The ease of writing tests is less important than the number of tests necessary for good coverage. If your testing strategy causes you to make design decisions that increase failure modes, then it's working in reverse.
Unit testing notably doesn't expose flaws in integration. You're better off testing the subobject by a subsuite of tests on the client object. Document how each test delegates particular behavior to the subobject and how it is therefore tested, effectively and accurately, in its natural environment.
Of course, I know there are a lot of managers out there who will have nothing less than 1000 lines of thumb-twiddling code that does nothing but bind up and corrupt the overall design.