Coder Social home page Coder Social logo

quarkus-mockk's Introduction

Quarkus JUnit5 MockK Extension

GitHub Actions Status Version License

Description

This Quarkus JUnit5 MockK extension allows you to easily inject MockK mocks.

The full documentation be found here.

Importing the dependency

First of all, you need to add the following dependency:

<dependency>
    <groupId>io.quarkiverse.mockk</groupId>
    <artifactId>quarkus-junit5-mockk</artifactId>
    <version>LATEST</version>
    <scope>test</scope>
</dependency>

If you are using gradle:

dependencies {
    testImplementation 'io.quarkiverse.mockk:quarkus-junit5-mockk:LATEST'
}

Compatibility with Quarkus

Starting with version 3+, version 2.0.0 of quarkus-junit5-mockk should be used. If you use a version between 2.8 and before 3.0.0, version 1.1.0 of quarkus-junit5-mockk should be used. If you use a version before 2.7, version 1.0.1 of quarkus-junit5-mockk should be used.

Example

Now, you can use @InjectMock and @InjectSpy in your test such as:

@QuarkusTest
class InjectionMockTest {

    @Inject
    private lateinit var firstService: FirstService

    @InjectMock
    private lateinit var secondService: SecondService

    @Test
    fun `should respond test`() {
        every { secondService.greet() } returns "test"
        assertThat(firstService.greet()).isEqualTo("test")
    }

    @Test
    fun `should respond second`() {
        every { secondService.greet() } returns "second"
        assertThat(firstService.greet()).isEqualTo("second")
        verify { secondService.greet() }
    }
}

quarkus-mockk's People

Contributors

actions-user avatar christiannavolskyi avatar csh0711 avatar dependabot[bot] avatar gastaldi avatar glefloch avatar gsmet avatar karthikmuralidharan avatar maxandersen avatar ruifcardoso avatar sherviiin avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

quarkus-mockk's Issues

Incompatibility with Quarkus 2.8.0

After upgrading to Quarkus 2.8.0 the extension is broken because of:

java.lang.reflect.InvocationTargetException
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:566)
	at io.quarkus.test.junit.QuarkusTestExtension.beforeEach(QuarkusTestExtension.java:410)
	...
Caused by: java.lang.NoSuchMethodError: 'java.lang.Object io.quarkus.test.junit.callback.QuarkusTestMethodContext.getOuterInstance()'
	at io.quarkiverse.test.junit.mockk.internal.SetMockkMockAsBeanMockCallback.beforeEach(SetMockkMockAsBeanMockCallback.kt:10)
	... 74 more

Move annotation to kotlin

Currently, @InjectMock and @InjectSpy are java annotation. This could be migrated to kotlin for simplicity.

Support mocking Rest Client

Hello
I have basic Rest Client

@Path("/extensions")
@RegisterRestClient
interface TestClient {

@GET
    fun get(): String
}

And basic test (I am trying to mock)

@QuarkusTest
class InjectMockTest {

    @InjectMock
    @RestClient
    private lateinit var mock: TestClient

    @Test
    fun doTest() {
        ...
    }
}

Sadly I am not able to mock

Failed to create test instance
org.junit.jupiter.api.extension.TestInstantiationException: Failed to create test instance
	at io.quarkus.test.junit.QuarkusTestExtension.initTestState(QuarkusTestExtension.java:773)
	at io.quarkus.test.junit.QuarkusTestExtension.interceptTestClassConstructor(QuarkusTestExtension.java:737)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.api.extension.InvocationInterceptor.interceptTestClassConstructor(InvocationInterceptor.java:73)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.lambda$invoke$0(InterceptingExecutableInvoker.java:93)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain$InterceptedInvocation.proceed(InvocationInterceptorChain.java:106)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.proceed(InvocationInterceptorChain.java:64)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.chainAndInvoke(InvocationInterceptorChain.java:45)
	at org.junit.jupiter.engine.execution.InvocationInterceptorChain.invoke(InvocationInterceptorChain.java:37)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:92)
	at org.junit.jupiter.engine.execution.InterceptingExecutableInvoker.invoke(InterceptingExecutableInvoker.java:62)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.invokeTestClassConstructor(ClassBasedTestDescriptor.java:363)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateTestClass(ClassBasedTestDescriptor.java:310)
	at org.junit.jupiter.engine.descriptor.ClassTestDescriptor.instantiateTestClass(ClassTestDescriptor.java:79)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.instantiateAndPostProcessTestInstance(ClassBasedTestDescriptor.java:286)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$4(ClassBasedTestDescriptor.java:278)
	at java.base/java.util.Optional.orElseGet(Optional.java:364)
	at org.junit.jupiter.engine.descriptor.ClassBasedTestDescriptor.lambda$testInstancesProvider$5(ClassBasedTestDescriptor.java:277)
	at org.junit.jupiter.engine.execution.TestInstancesProvider.getTestInstances(TestInstancesProvider.java:31)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$prepare$0(TestMethodTestDescriptor.java:105)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:104)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.prepare(TestMethodTestDescriptor.java:68)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$prepare$2(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.prepare(NodeTestTask.java:123)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:90)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.invokeAll(SameThreadHierarchicalTestExecutorService.java:41)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$6(NodeTestTask.java:155)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$8(NodeTestTask.java:141)
	at org.junit.platform.engine.support.hierarchical.Node.around(Node.java:137)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.lambda$executeRecursively$9(NodeTestTask.java:139)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.executeRecursively(NodeTestTask.java:138)
	at org.junit.platform.engine.support.hierarchical.NodeTestTask.execute(NodeTestTask.java:95)
	at org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService.submit(SameThreadHierarchicalTestExecutorService.java:35)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor.execute(HierarchicalTestExecutor.java:57)
	at org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine.execute(HierarchicalTestEngine.java:54)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:147)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:127)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:90)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.lambda$execute$0(EngineExecutionOrchestrator.java:55)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.withInterceptedStreams(EngineExecutionOrchestrator.java:102)
	at org.junit.platform.launcher.core.EngineExecutionOrchestrator.execute(EngineExecutionOrchestrator.java:54)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:114)
	at org.junit.platform.launcher.core.DefaultLauncher.execute(DefaultLauncher.java:86)
	at org.junit.platform.launcher.core.DefaultLauncherSession$DelegatingLauncher.execute(DefaultLauncherSession.java:86)
	at org.junit.platform.launcher.core.SessionPerRequestLauncher.execute(SessionPerRequestLauncher.java:53)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.processAllTestClasses(JUnitPlatformTestClassProcessor.java:99)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor$CollectAllTestClassesExecutor.access$000(JUnitPlatformTestClassProcessor.java:79)
	at org.gradle.api.internal.tasks.testing.junitplatform.JUnitPlatformTestClassProcessor.stop(JUnitPlatformTestClassProcessor.java:75)
	at org.gradle.api.internal.tasks.testing.SuiteTestClassProcessor.stop(SuiteTestClassProcessor.java:61)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:36)
	at org.gradle.internal.dispatch.ReflectionDispatch.dispatch(ReflectionDispatch.java:24)
	at org.gradle.internal.dispatch.ContextClassLoaderDispatch.dispatch(ContextClassLoaderDispatch.java:33)
	at org.gradle.internal.dispatch.ProxyDispatchAdapter$DispatchingInvocationHandler.invoke(ProxyDispatchAdapter.java:94)
	at jdk.proxy1/jdk.proxy1.$Proxy2.stop(Unknown Source)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker$3.run(TestWorker.java:193)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.executeAndMaintainThreadName(TestWorker.java:129)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:100)
	at org.gradle.api.internal.tasks.testing.worker.TestWorker.execute(TestWorker.java:60)
	at org.gradle.process.internal.worker.child.ActionExecutionWorker.execute(ActionExecutionWorker.java:56)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:133)
	at org.gradle.process.internal.worker.child.SystemApplicationClassLoaderWorker.call(SystemApplicationClassLoaderWorker.java:71)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.run(GradleWorkerMain.java:69)
	at worker.org.gradle.process.internal.worker.GradleWorkerMain.main(GradleWorkerMain.java:74)
Caused by: java.lang.IllegalStateException: Invalid use of io.quarkiverse.test.junit.mockk.InjectMock - could not determine bean of type: interface com.sth.sth2.clients.TestClient. Offending field is mock of test class class com.sth.clients.InjectMockTest
	at io.quarkiverse.test.junit.mockk.internal.ReflectionUtils.getBeanInstance(ReflectionUtils.kt:14)
	at io.quarkiverse.test.junit.mockk.internal.CreateMockkMocksCallback.afterConstruct(CreateMockkMocksCallback.kt:19)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
	at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
	at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
	at java.base/java.lang.reflect.Method.invoke(Method.java:568)
	at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeCallbacks(AbstractTestWithCallbacksExtension.java:154)
	at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeAfterConstructCallbacks(AbstractTestWithCallbacksExtension.java:64)
	at io.quarkus.test.junit.QuarkusTestExtension.initTestState(QuarkusTestExtension.java:767)
	... 82 more 

Quarkus version 1.1.0
Mockk extension 2.14.3

Support function with generic types stubbing

Reflection utils cannot find both bean instance and qualifier.
For bean instance a problem is related with suspended Functions using generic type.

import arrow.core.Either

typealias AssignKeyboard = suspend (Computer) -> Either<KeyboardError, Unit>
typealias AssignMouse = suspend (Computer) -> Either<MouseError, Unit>

To be more precise that's the exact type:

kotlin.jvm.functions.Function2<? super rg.zerokvm.domain.model.Computer, ? super kotlin.coroutines.Continuation<? super arrow.core.Either<? extends rg.zerokvm.domain.port.api.AssignMouse, ? extends kotlin.Unit>>, ?>

Most likely (?) literal type should be used, e.g. I'm able to find my bean instance with the code:

val typeLiteral = object : TypeLiteral<AssignMouse>() {}
val beanInstance = CDI.current().select(typeLiteral, @Named("AssignMouse"))

instead:

Arc.container().instance(fieldClass, *getQualifier(field))?.get()

Below you may see the rest of the code:

class ApiConfig {

    @ApplicationScoped
    @Named("AssignMouse")
    fun assignMouseBean(): AssignMouse = // ...

    @ApplicationScoped
    @Named("AssignKeyboard")
    fun assignKeyboardBean(): AssignKeyboard = // ...

}

// ...
@Path("/api")
class AssignMouseRestApiAdapter(
    @Named("AssignMouse")
    private val assignMouse: AssignMouse,
) {

    @Path("/assigment")
    @POST
    suspend fun foo() {
        // some code
    }

}


@QuarkusTest
internal class AssignMouseRestApiAdapterTest {

    @InjectMock
    @Named("AssignMouse")
    private lateinit var assignMouse: AssignMouse,

    fun `should foo`() {
        // ...
    }

}

Also Named Qualifier is not seen for declared annotations.

@InjectMock does not behave like a mock created via "mockk()"

I am developing a Quarkus Kubernetes operator that is interacting with AWS through the AWS SDK for Java and I'm using mockk in my unit and integration tests.

One of the cases that I need to mock are calls to AWS SDK's paginators, for example:
organizationsClient.listAccountsPaginator() where organizationsClient is an OrganizationsAsyncClient.

In my unit tests I create the mock via the @MockK annotation and the mocking is fairly straightfoward:

every { organizationsClient.listAccountsPaginator() } answers { callOriginal() }
every { organizationsClient.listAccounts(any<ListAccountsRequest>()) } returns CompletableFuture.completedFuture(ListAccountsResponse.builder().accounts(account).build())

In my integration tests (which are @QuarkusTests), if I use @InjectMock and mock the paginator calls in the same way, I get exceptions of the following kind:

io.mockk.MockKException: no answer found for: AwsClientBean_ProducerMethod_organizationsClient_162d3fc8f8a3dacbf06a8e602ca1d5cf033cb60b_ClientProxy(#1).arc$delegate()

However, if I create a bean that replaces the original bean and create my mock with mockk() my mocks are working as expected:

class AwsTestClientBean {
    @Alternative
    @Priority(1)
    @ApplicationScoped
    fun organizationsClient(): OrganizationsAsyncClient = mockk()
}

Enable dependabot on dependency

Hi @gastaldi, it looks like dependabot is not enable by default and I don't have access to the settings part of the project.
Is it possible for you to enable it? Thanks!

Incompatible with Quarkus 3.2.3

Hello Team!

I've recently upgraded an app to Quarkus 3.2.3 from Quarkus 2.x. This included upgrading quarkus-mockk to 2.0.0 as per the documentation. I now get an exception when using InjectSpy.
Caused by: java.lang.NoClassDefFoundError: io/quarkus/arc/runtime/ClientProxyUnwrapper at io.quarkiverse.test.junit.mockk.internal.CreateMockkSpiesCallback.createSpyAndSetTestField(CreateMockkSpiesCallback.kt:27) at io.quarkiverse.test.junit.mockk.internal.CreateMockkSpiesCallback.afterConstruct(CreateMockkSpiesCallback.kt:17) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62) at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43) at java.base/java.lang.reflect.Method.invoke(Method.java:566)
I had a look at the code, and noticed that quarkus-mockk uses quarkus-arc version 3.1.1. It appears that later versions of quarkus-arc have removed ClientProxyUnwrapper. I tried just downgrading quarkus-arc, but that causes issues in other parts of the application build process.
Do you have any ideas as to when Quarkus 3.2.x will be supported?
Thanks for your help.

Support for @QuarkusIntegrationTest

When running ./gradlew quarkusIntTest or ./gradlew testNative alongside mockito or quarkus-mockk, the following error is thrown:

quarkus-mockk

java.lang.NoSuchMethodException: io.quarkiverse.test.junit.mockk.internal.SetMockkMockAsBeanMockCallback.beforeEach(io.quarkus.test.junit.callback.QuarkusTestMethodContext)
	at java.base/java.lang.Class.getMethod(Class.java:2227)
	at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeCallbacks(AbstractTestWithCallbacksExtension.java:153)
	at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeBeforeEachCallbacks(AbstractTestWithCallbacksExtension.java:76)
	at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeBeforeEachCallbacks(AbstractTestWithCallbacksExtension.java:72)
	at io.quarkus.test.junit.QuarkusIntegrationTestExtension.beforeEach(QuarkusIntegrationTestExtension.java:113)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeEachCallbacks$2(TestMethodTestDescriptor.java:166)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeMethodsOrCallbacksUntilExceptionOccurs$6(TestMethodTestDescriptor.java:202)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(TestMethodTestDescriptor.java:202)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeEachCallbacks(TestMethodTestDescriptor.java:165)
	
...

	Suppressed: java.lang.NoSuchMethodException: io.quarkiverse.test.junit.mockk.internal.ResetMockkMocksCallback.afterEach(io.quarkus.test.junit.callback.QuarkusTestMethodContext)
		at java.base/java.lang.Class.getMethod(Class.java:2227)
		at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeCallbacks(AbstractTestWithCallbacksExtension.java:153)
		at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeAfterEachCallbacks(AbstractTestWithCallbacksExtension.java:88)
		at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeAfterEachCallbacks(AbstractTestWithCallbacksExtension.java:80)
		at io.quarkus.test.junit.QuarkusIntegrationTestExtension.afterEach(QuarkusIntegrationTestExtension.java:86)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAfterEachCallbacks$12(TestMethodTestDescriptor.java:260)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$13(TestMethodTestDescriptor.java:276)
		at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$14(TestMethodTestDescriptor.java:276)
		at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAllAfterMethodsOrCallbacks(TestMethodTestDescriptor.java:275)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAfterEachCallbacks(TestMethodTestDescriptor.java:259)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:144)
		... 64 more

mockito

java.lang.NoSuchMethodException: io.quarkus.test.junit.mockito.internal.SetMockitoMockAsBeanMockCallback.beforeEach(io.quarkus.test.junit.callback.QuarkusTestMethodContext)
	at java.base/java.lang.Class.getMethod(Class.java:2227)
	at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeCallbacks(AbstractTestWithCallbacksExtension.java:153)
	at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeBeforeEachCallbacks(AbstractTestWithCallbacksExtension.java:76)
	at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeBeforeEachCallbacks(AbstractTestWithCallbacksExtension.java:72)
	at io.quarkus.test.junit.QuarkusIntegrationTestExtension.beforeEach(QuarkusIntegrationTestExtension.java:113)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeEachCallbacks$2(TestMethodTestDescriptor.java:166)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeBeforeMethodsOrCallbacksUntilExceptionOccurs$6(TestMethodTestDescriptor.java:202)
	at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeMethodsOrCallbacksUntilExceptionOccurs(TestMethodTestDescriptor.java:202)
	at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeBeforeEachCallbacks(TestMethodTestDescriptor.java:165)
	
...

	Suppressed: java.lang.NoSuchMethodException: io.quarkus.test.junit.mockito.internal.ResetMockitoMocksCallback.afterEach(io.quarkus.test.junit.callback.QuarkusTestMethodContext)
		at java.base/java.lang.Class.getMethod(Class.java:2227)
		at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeCallbacks(AbstractTestWithCallbacksExtension.java:153)
		at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeAfterEachCallbacks(AbstractTestWithCallbacksExtension.java:88)
		at io.quarkus.test.junit.AbstractTestWithCallbacksExtension.invokeAfterEachCallbacks(AbstractTestWithCallbacksExtension.java:80)
		at io.quarkus.test.junit.QuarkusIntegrationTestExtension.afterEach(QuarkusIntegrationTestExtension.java:86)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAfterEachCallbacks$12(TestMethodTestDescriptor.java:260)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$13(TestMethodTestDescriptor.java:276)
		at org.junit.platform.engine.support.hierarchical.ThrowableCollector.execute(ThrowableCollector.java:73)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.lambda$invokeAllAfterMethodsOrCallbacks$14(TestMethodTestDescriptor.java:276)
		at java.base/java.util.ArrayList.forEach(ArrayList.java:1511)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAllAfterMethodsOrCallbacks(TestMethodTestDescriptor.java:275)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.invokeAfterEachCallbacks(TestMethodTestDescriptor.java:259)
		at org.junit.jupiter.engine.descriptor.TestMethodTestDescriptor.execute(TestMethodTestDescriptor.java:144)
		... 64 more

This is my build.gradle file

plugins {
    id 'org.jetbrains.kotlin.jvm' version "1.7.21"
    id "org.jetbrains.kotlin.plugin.allopen" version "1.7.21"
    id 'io.quarkus'
    id "org.jlleitschuh.gradle.ktlint" version "11.0.0"
}

repositories {
    mavenCentral()
    mavenLocal()
}

dependencies {
    implementation 'io.quarkiverse.loggingjson:quarkus-logging-json:2.0.0'
    implementation 'io.quarkus:quarkus-opentelemetry'
    implementation 'io.quarkus:quarkus-smallrye-openapi'
    implementation 'io.quarkus:quarkus-hibernate-validator'
    implementation 'io.quarkus:quarkus-mongodb-panache'
    implementation 'io.quarkus:quarkus-smallrye-health'
    implementation enforcedPlatform("${quarkusPlatformGroupId}:${quarkusPlatformArtifactId}:${quarkusPlatformVersion}")
    implementation 'io.quarkus:quarkus-kotlin'
    implementation 'org.jetbrains.kotlin:kotlin-stdlib-jdk8'
    implementation 'io.quarkus:quarkus-arc'
    implementation("io.quarkus:quarkus-resteasy-reactive-jackson")

    testImplementation "com.google.truth:truth:1.1.3"
    testImplementation("io.quarkus:quarkus-junit5")
    testImplementation("io.rest-assured:rest-assured")
    testImplementation("io.rest-assured:kotlin-extensions")
    testImplementation 'io.quarkiverse.mockk:quarkus-junit5-mockk:1.1.1'
}

group 'br.com.straloo'
version '1.0.0-SNAPSHOT'

java {
    sourceCompatibility = JavaVersion.VERSION_17
    targetCompatibility = JavaVersion.VERSION_17
}

test {
    systemProperty "java.util.logging.manager", "org.jboss.logmanager.LogManager"
}
allOpen {
    annotation("javax.ws.rs.Path")
    annotation("javax.enterprise.context.ApplicationScoped")
    annotation("io.quarkus.test.junit.QuarkusTest")
}

compileKotlin {
    kotlinOptions.jvmTarget = JavaVersion.VERSION_17
    kotlinOptions.javaParameters = true
}

compileTestKotlin {
    kotlinOptions.jvmTarget = JavaVersion.VERSION_17
}

Removing io.quarkiverse.mockk:quarkus-junit5-mockk solves the problem.

It is important to highlight that the tested class does not use this library.

This is the Test:

package br.com.straloo.rocky.presentation

import br.com.straloo.rocky.domain.ExerciseExecutionIn
import br.com.straloo.rocky.domain.SequenceIn
import com.mongodb.client.MongoClients
import io.quarkus.test.junit.QuarkusIntegrationTest
import io.restassured.http.ContentType
import io.restassured.module.kotlin.extensions.Given
import io.restassured.module.kotlin.extensions.Then
import io.restassured.module.kotlin.extensions.When
import org.hamcrest.Matchers.notNullValue
import org.junit.jupiter.api.BeforeEach
import org.junit.jupiter.api.Test

@QuarkusIntegrationTest
class SequenceControllerTest {

    private val URI = "mongodb://localhost:27017"
    private val client = MongoClients.create(URI)
    val db = client.getDatabase("rocky")

    @BeforeEach
    fun reset() {
        client.listDatabases().forEach {
            val dbName = it["name"] as String
            if (dbName != "admin") {
                client.getDatabase(dbName).drop()
            }
        }
    }

    @Test
    fun whenSubmitsAnSequence_shouldReturnIt() {
        val sequenceIn = SequenceIn(
            "artrose",
            "A",
            listOf(
                ExerciseExecutionIn(
                    "63a79e7999782320906daa76",
                    15,
                    10,
                    3
                )
            )
        )

        Given {
            contentType(ContentType.JSON)
            body(sequenceIn)
        }.When {
            post("/sequences")
        }.Then {
            statusCode(200)
            body("id", notNullValue())
        }
    }
}

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.