Mockito是否支持@Any @Inject Instance<>接口?



i有一个init()方法,它使用注入私有实例&lt;>。如何使用Junit或Mockito测试该课程?我试图做一些假班,并将它们添加到列表中,并将此列表设置为我的私人字段,但我有此错误

java.lang.illegalargumentException:无法设置javax.enterprise.inject.inject.instance字段......

myclass是:

@Singleton
@Startup
public class HandlerManager {
    @Any
    @Inject
    private Instance<RollbackHandler<RollbackData>> handlers;
    private RollbackHandler<RollbackData> rollbackHandler;

    @PostConstruct
    public void init() {
        for (RollbackHandler<RollbackData> bean : handlers) {
//do something
            }
        }
    }

除非您使用自定义工作,否则任何注释均不会通过框架处理。您必须使用@mock在测试中调用测试方法(例如setup()之前,将所有这些依赖项定义为测试中的模拟。这是一个多部分问题。

  • 使用构造仪注入,现场注射是邪恶的。您仍然可以用@Inject注释您的构造函数。
when(provider.iterator()).thenReturn(list.iterator);

为我工作。

您可以使用RollbackHandler的具体实现创建一个临时列表,并模拟Instance<RollbackHandler<RollbackData>>对象的iterator()方法,以便它返回临时列表的迭代器。

示例:

private void mockIterator() {
    Instance<RollbackHandler<RollbackData>> handlers = mock(Instance.class);    
    List<RollbackHandler<RollbackData>> handlersList = Collections.singletonList(new RollbackHandlerImpl<>());
    
    when(handlers.iterator()).thenReturn(handlersList.iterator());
}

相关内容

  • 没有找到相关文章

最新更新