@Provides methods always trump @Inject Constructors and no-args Constructors (with field injection.
This is important, because an @Provides method is taking over responsibility for creation of the type, and that includes scoping, so a class marked @Singleton that is manually constructed in an @Provides method will not be scoped unless the @Provides method is scoped.
Note that you're using the word "override" in the context of testing... in this case, you don't need to use the @Module(override=true) setting (though there's no harm). It's just a precedence order, which resolves (in effect) as follows:
- @Module(overrides=true) @Provides methods
- @Module(overrides=false) (default) @Provides methods
- Just In Time binding of @Inject constructors
- Just In Time binding of no-arg constructors, IF class has @Inject fields.