Currently, @MockitoBean can be used to create or replace a bean definition, and @TestBean can only be used to replace a bean definition.

The reason is that the @MockitoBean support is hard coded to use the REPLACE_OR_CREATE_DEFINITION strategy; whereas, the @TestBean support is hard coded to use the REPLACE_DEFINITION strategy.

Instead of hard coding those strategies, we should introduce a new enforceOverride attribute in @TestBean and @MockitoBean that defaults to true but allows the user to decide if it's OK to create a bean for a nonexistent bean definition. TestBeanOverrideProcessor and MockitoBeanOverrideProcessor can then dynamically decide whether to use the REPLACE_DEFINITION or REPLACE_OR_CREATE_DEFINITION strategy based on the enforceOverride flag.

Comment From: sbrannen

Reopening to switch the default values for enforceOverride attributes to false, to align with the existing behavior for @MockBean in Spring Boot and to simplify the programming model for common use cases.