spring - @MockBean with Gradle giving indeterministic class for integration test - Stack Overflow

I am using the following for my integration test@ExtendWith(SpringExtension::class)@SpringBootTest(we

I am using the following for my integration test

@ExtendWith(SpringExtension::class)
@SpringBootTest(
    webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
    classes = [TestSecurityConfig::class],
    properties = ["spring.main.allow-bean-definition-overriding=true"],
)
@AutoConfigureMockMvc
class ImportControllerIT {
    @MockBean
    private lateinit var restClientImpl: RestClientImpl

     @MockBean
     private lateinit var fileManagerImpl: FileManagerImpl

    @Autowired
    private lateinit var mockMvc: MockMvc

 ....
    @BeforeAll
    fun setup() {
        whenever(restClientImpl.getFileContent(uuid, null)).thenReturn(getFileContent("employee.csv"))

        RestAssured.port = port
    }

Wherever I run the code using IntellJ, I see the Mock Bean being used, but when I test the behaviour using gradle command like bash ./gradlew -i integrationTest I see the mock bean and the actual bean being picked randomly.

What am I doing wrong?

I am using the following for my integration test

@ExtendWith(SpringExtension::class)
@SpringBootTest(
    webEnvironment = SpringBootTest.WebEnvironment.DEFINED_PORT,
    classes = [TestSecurityConfig::class],
    properties = ["spring.main.allow-bean-definition-overriding=true"],
)
@AutoConfigureMockMvc
class ImportControllerIT {
    @MockBean
    private lateinit var restClientImpl: RestClientImpl

     @MockBean
     private lateinit var fileManagerImpl: FileManagerImpl

    @Autowired
    private lateinit var mockMvc: MockMvc

 ....
    @BeforeAll
    fun setup() {
        whenever(restClientImpl.getFileContent(uuid, null)).thenReturn(getFileContent("employee.csv"))

        RestAssured.port = port
    }

Wherever I run the code using IntellJ, I see the Mock Bean being used, but when I test the behaviour using gradle command like bash ./gradlew -i integrationTest I see the mock bean and the actual bean being picked randomly.

What am I doing wrong?

Share Improve this question edited Nov 19, 2024 at 9:02 Anish B. 17.1k4 gold badges28 silver badges50 bronze badges asked Nov 16, 2024 at 17:30 Suraj MenonSuraj Menon 1,6044 gold badges28 silver badges53 bronze badges 1
  • Can you annotate your field with @Primary? – knittl Commented Nov 19, 2024 at 16:17
Add a comment  | 

1 Answer 1

Reset to default 1

I'm not 100% sure but it looks like spring.main.allow-bean-definition-overriding=true is causing the randomness of picking the mock bean and the actual bean.

Recommendation: Avoid doing the override of bean definition especially in tests.

Solution: Fix your implementation so that you don't need to override any kind of bean definitions in tests.

发布者:admin,转转请注明出处:http://www.yc00.com/questions/1745648720a4638128.html

相关推荐

发表回复

评论列表(0条)

  • 暂无评论

联系我们

400-800-8888

在线咨询: QQ交谈

邮件:admin@example.com

工作时间:周一至周五,9:30-18:30,节假日休息

关注微信