diff --git a/microprofile/testing/mocking/src/main/java/io/helidon/microprofile/testing/mocking/MockBeansCdiExtension.java b/microprofile/testing/mocking/src/main/java/io/helidon/microprofile/testing/mocking/MockBeansCdiExtension.java index eb68cc5c011..741e20fd198 100644 --- a/microprofile/testing/mocking/src/main/java/io/helidon/microprofile/testing/mocking/MockBeansCdiExtension.java +++ b/microprofile/testing/mocking/src/main/java/io/helidon/microprofile/testing/mocking/MockBeansCdiExtension.java @@ -68,23 +68,27 @@ private void processMockBeanParameters(List> par }); } - void registerOtherBeans(@Observes AfterBeanDiscovery event, BeanManager beanManager) { + void registerMocks(@Observes AfterBeanDiscovery event, BeanManager beanManager) { // Register all mocks mocks.entrySet().forEach(entry -> { + Object eagerMock = Mockito.mock(entry.getKey(), + Mockito.withSettings().defaultAnswer(entry.getValue().answer())); event.addBean() .addType(entry.getKey()) .scope(ApplicationScoped.class) .alternative(true) .createWith(inst -> { + Object mock; Set> beans = beanManager.getBeans(MockSettings.class); if (!beans.isEmpty()) { Bean bean = beans.iterator().next(); MockSettings mockSettings = (MockSettings) beanManager.getReference(bean, MockSettings.class, beanManager.createCreationalContext(null)); - return Mockito.mock(entry.getKey(), mockSettings); + mock = Mockito.mock(entry.getKey(), mockSettings); } else { - return Mockito.mock(entry.getKey(), Mockito.withSettings().defaultAnswer(entry.getValue().answer())); + mock = eagerMock; } + return mock; }) .priority(0); }); diff --git a/microprofile/tests/testing/junit5/src/test/java/io/helidon/microprofile/tests/testing/junit5/TestIssue9397.java b/microprofile/tests/testing/junit5/src/test/java/io/helidon/microprofile/tests/testing/junit5/TestIssue9397.java new file mode 100644 index 00000000000..47cac4b80a5 --- /dev/null +++ b/microprofile/tests/testing/junit5/src/test/java/io/helidon/microprofile/tests/testing/junit5/TestIssue9397.java @@ -0,0 +1,49 @@ +/* + * Copyright (c) 2024 Oracle and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.helidon.microprofile.tests.testing.junit5; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.ArgumentMatchers.anyString; + +import io.helidon.microprofile.testing.junit5.AddBean; +import io.helidon.microprofile.testing.junit5.HelidonTest; +import io.helidon.microprofile.testing.mocking.MockBean; + +import org.junit.jupiter.api.Test; +import org.mockito.Mockito; + +@HelidonTest +@AddBean(TestIssue9397.Service.class) +class TestIssue9397 { + + @MockBean + private Service service; + + @Test + void testArgumentMatcher() { + Mockito.when(service.test(anyString())).thenReturn("Mocked"); + assertThat(service.test("something"), is("Mocked")); + } + + static class Service { + + String test(String test) { + return test; + } + } +} diff --git a/microprofile/tests/testing/testng/src/test/java/io/helidon/microprofile/tests/testing/testng/TestIssue9397.java b/microprofile/tests/testing/testng/src/test/java/io/helidon/microprofile/tests/testing/testng/TestIssue9397.java new file mode 100644 index 00000000000..94cf1df0021 --- /dev/null +++ b/microprofile/tests/testing/testng/src/test/java/io/helidon/microprofile/tests/testing/testng/TestIssue9397.java @@ -0,0 +1,50 @@ +/* + * Copyright (c) 2024 Oracle and/or its affiliates. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +package io.helidon.microprofile.tests.testing.testng; + +import static org.hamcrest.CoreMatchers.is; +import static org.hamcrest.MatcherAssert.assertThat; +import static org.mockito.ArgumentMatchers.anyString; + +import jakarta.inject.Inject; + +import io.helidon.microprofile.testing.mocking.MockBean; +import io.helidon.microprofile.testing.testng.HelidonTest; + +import org.mockito.Mockito; +import org.testng.annotations.Test; + +@HelidonTest +class TestIssue9397 { + + @MockBean + @Inject + private Service service; + + @Test + void testArgumentMatcher() { + Mockito.when(service.test(anyString())).thenReturn("Mocked"); + assertThat(service.test("something"), is("Mocked")); + } + + static class Service { + + String test(String test) { + return test; + } + } +}