gpt4 book ai didi

java - 如何在真实的Web容器中使用Mockito来模拟一些接口(interface)

转载 作者:行者123 更新时间:2023-12-01 19:58:43 26 4
gpt4 key购买 nike

是否可以使用 Mockito 模拟接口(interface),而不是在单元测试或 Arquilian 测试中,而是在真正的 WEB 容器中?
我想做的是从 IBM Filenet API 模拟这两个接口(interface):DocumentProperties测试在容器(WildFly)中运行的 Spring 应用程序,而无需真正连接到 IBM/Filenet 框架。

<小时/>

UnitTest 工作正常,例如这个:

@Test
public void mock() {
Document d = Mockito.mock(Document.class);
Properties p = Mockito.mock(Properties.class);

Mockito.when(d.getProperties()).thenReturn(p);
Mockito.when(p.getStringValue("Ala")).thenReturn("Bella");
....
....
}

但是当我尝试运行部署到容器的代码时:

@Override
public DocumentSet someMethod(String ..... ) {

Document d = mock(Document.class); // this line throws an Exception
Properties p = mock(Properties.class);
when(d.getProperties()).thenReturn(p);
.....

我在这一行收到 ClassNotFoundException 异常:Document d = mock(Document.class);

1:18:11,310 ERROR [org.springframework.batch.core.step.AbstractStep] (SimpleAsyncTaskExecutor-1) Encountered an error executing step csvFilesProcessStep in job process_csv_files: java.lang.NoClassDefFoundError: org/mockito/Mockito
at com.somepackage.step.ce.CeOperationsProcessorTestImpl.searchAndFetchDocumentsById(CeOperationsProcessorTestImpl.java:44)
at com.somepackage.step.CvsFilesProcessor.processFile(CvsFilesProcessor.java:110)
at com.somepackage.step.CvsFilesProcessor.process(CvsFilesProcessor.java:83)
at com.somepackage.step.CvsFilesProcessor.process(CvsFilesProcessor.java:1)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:498)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:317)
at org.springframework.aop.framework.ReflectiveMethodInvocation.invokeJoinpoint(ReflectiveMethodInvocation.java:190)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:157)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.doProceed(DelegatingIntroductionInterceptor.java:133)
at org.springframework.aop.support.DelegatingIntroductionInterceptor.invoke(DelegatingIntroductionInterceptor.java:121)
at org.springframework.aop.framework.ReflectiveMethodInvocation.proceed(ReflectiveMethodInvocation.java:179)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:207)
at com.sun.proxy.$Proxy62.process(Unknown Source)
at org.springframework.batch.core.step.item.SimpleChunkProcessor.doProcess(SimpleChunkProcessor.java:126)
at org.springframework.batch.core.step.item.SimpleChunkProcessor.transform(SimpleChunkProcessor.java:293)
at org.springframework.batch.core.step.item.SimpleChunkProcessor.process(SimpleChunkProcessor.java:192)
at org.springframework.batch.core.step.item.ChunkOrientedTasklet.execute(ChunkOrientedTasklet.java:75)
at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:406)
at org.springframework.batch.core.step.tasklet.TaskletStep$ChunkTransactionCallback.doInTransaction(TaskletStep.java:330)
at org.springframework.transaction.support.TransactionTemplate.execute(TransactionTemplate.java:133)
at org.springframework.batch.core.step.tasklet.TaskletStep$2.doInChunkContext(TaskletStep.java:271)
at org.springframework.batch.core.scope.context.StepContextRepeatCallback.doInIteration(StepContextRepeatCallback.java:77)
at org.springframework.batch.repeat.support.RepeatTemplate.getNextResult(RepeatTemplate.java:368)
at org.springframework.batch.repeat.support.RepeatTemplate.executeInternal(RepeatTemplate.java:215)
at org.springframework.batch.repeat.support.RepeatTemplate.iterate(RepeatTemplate.java:144)
at org.springframework.batch.core.step.tasklet.TaskletStep.doExecute(TaskletStep.java:257)
at org.springframework.batch.core.step.AbstractStep.execute(AbstractStep.java:198)
at org.springframework.batch.core.job.SimpleStepHandler.handleStep(SimpleStepHandler.java:148)
at org.springframework.batch.core.job.flow.JobFlowExecutor.executeStep(JobFlowExecutor.java:64)
at org.springframework.batch.core.job.flow.support.state.StepState.handle(StepState.java:67)
at org.springframework.batch.core.job.flow.support.SimpleFlow.resume(SimpleFlow.java:165)
at org.springframework.batch.core.job.flow.support.SimpleFlow.start(SimpleFlow.java:144)
at org.springframework.batch.core.job.flow.FlowJob.doExecute(FlowJob.java:134)
at org.springframework.batch.core.job.AbstractJob.execute(AbstractJob.java:304)
at org.springframework.batch.core.launch.support.SimpleJobLauncher$1.run(SimpleJobLauncher.java:135)
at java.lang.Thread.run(Thread.java:748)
Caused by: java.lang.ClassNotFoundException: org.mockito.Mockito from [Module "deployment.someapp_web-1.1.3-SNAPSHOT.war:main" from Service Module Loader]
at org.jboss.modules.ModuleClassLoader.findClass(ModuleClassLoader.java:198)
at org.jboss.modules.ConcurrentClassLoader.performLoadClassUnchecked(ConcurrentClassLoader.java:363)
at org.jboss.modules.ConcurrentClassLoader.performLoadClass(ConcurrentClassLoader.java:351)
at org.jboss.modules.ConcurrentClassLoader.loadClass(ConcurrentClassLoader.java:93)
... 39 more

现在我对这两个接口(interface)实现了自己的测试实现,但是很乏味,因为它们有数百个方法。

最佳答案

最有可能的是,您将 Mockito 作为 Maven 中的测试依赖项(或用于构建代码的任何内容)。在 pom.xml文件中,会有一行 <scope>test</scope><dependency>导入 Mockito 的标记。如果您注释掉该行,您应该能够找到该类。另外,WildFly 需要 Mockito JAR 文件,因此请确保它位于 WAR 文件或 lib 目录中。

但是...您不是想在生产服务器上进行集成测试吗?我一生都无法想象你为什么要做这样的事。这是一项工作,但您想要做的是编写一个集成测试来启动服务器、部署代码、测试它并关闭服务器。谷歌搜索 java integration test .

关于java - 如何在真实的Web容器中使用Mockito来模拟一些接口(interface),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48663218/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com