Java 在不运行JBoss实例的情况下使用Weld模拟类

Java 在不运行JBoss实例的情况下使用Weld模拟类,java,junit,ejb,weld,Java,Junit,Ejb,Weld,我对使用Weld和JUnit5模拟类有问题。我已经尝试过不同的方法,但没有一种结果是令人满意的。我想模拟一些没有运行JBoss实例的EJB类,以便在测试中使用它 我已经尝试过类似于我找到的教程的方法,但是我不能用这种方法模拟多个类 @WeldSetup public WeldInitiator weld = WeldInitiator.from(RunService.class).addBeans(createBeans()).build(); static Bean<?> c

我对使用Weld和JUnit5模拟类有问题。我已经尝试过不同的方法,但没有一种结果是令人满意的。我想模拟一些没有运行JBoss实例的EJB类,以便在测试中使用它

我已经尝试过类似于我找到的教程的方法,但是我不能用这种方法模拟多个类

@WeldSetup
public WeldInitiator weld = WeldInitiator.from(RunService.class).addBeans(createBeans()).build();

  static Bean<?> createBeans() {
    return MockBean.builder()
            .types(RunService.class)
            .scope(ApplicationScoped.class)
            .creating(
                    when(mock(RunService.class).findSchedulerUserId()).thenReturn(10).getMock())
            .build();
            }
如果你有任何能指引我正确方向的提示,我将不胜感激

编辑:我发现了类似的东西,也许这会有助于找到解决方案:


如果在调用时将模拟RunService作为单独语句而不是内联在
中创建,是否仍会发生错误?@JonK不幸的是,是:(我不确定我是否理解您的问题,
addBeans()
方法允许您指定多个bean,或者可以重复调用它,如您发现的
AddBeanTest
中所示。这有什么不足?您还注意到了
WeldInitiator
使用
setEjbFactory
方法模拟EJB工厂的功能吗?如果创建模拟,是否仍然会出现错误d在调用
时将服务作为单独的语句运行,而不是内联在
中?@JonK不幸的是,是:(我不确定我是否理解您的问题,
addBeans()
方法允许您指定多个bean,或者可以重复调用它,如您发现的
AddBeanTest
中所示。这有什么不足?您还注意到了
WeldInitiator
使用
setEjbFactory
方法模拟EJB工厂的功能吗?看
org.mockito.exceptions.misusing.InvalidUseOfMatchersException:
Misplaced or misused argument matcher detected here:
-> at com.gft.prevista.nap.filescanner.scan.FileDispatchTest.createBeans(FileDispatchTest.java:36)
You cannot use argument matchers outside of verification or stubbing.
Examples of correct usage of argument matchers:
   when(mock.get(anyInt())).thenReturn(null);
   doThrow(new RuntimeException()).when(mock).someVoidMethod(anyObject());
   verify(mock).someMethod(contains("foo"))