Code implementation which potentially decrease code coverage in your code or makes it hard to test:
- Static methods.
- Static classes (including Singleton).
- Constructors with the new keyword.
- Extension methods.
Approaches which help to test your code better:
- Interface usage.
- Dependency Injection.
- Inversion of Control.
- Fabric design pattern.