Test concrete code, not abstractions.
As an example, if you have a .NET or Java API project with multiple layers (e.g. API, service, repository), test at the API layer and this will by extension test all of the deeper layers. Testing in this way gives you free reign to change the underlying abstractions, using the tests as a guide for overall correctness.