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

时间:2019-03-04 11:42:16

标签: junit mockito instance ejb-3.0 inject

我有一个init()方法,该方法使用注入的私有实例<>。如何使用JUnit或Mockito测试此类?我试图制作一些假的类并将其添加到列表中,然后将此列表设置为我的私有字段,但是出现此错误

java.lang.IllegalArgumentException:无法设置javax.enterprise.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

            }
        }
    }

2 个答案:

答案 0 :(得分:0)

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

  • 使用构造函数注入,字段注入是有害的。您仍然可以使用@Inject注释构造函数。

答案 1 :(得分:0)

when(provider.iterator()).thenReturn(list.iterator);

为我工作。