如何在使用Mockito和CDI时不模拟对象



我有一个对象读取配置属性,如下所示:

@ApplicationScoped
    public class Configuration {
    @Inject
    @Config(value = "endpoint.base", defaultValue = "http://localhost:52885/consumers")
private String base;
    public String getBase() { return base; } 
}

该对象被注入到如下服务对象中:

public class LoyaltyService {
    final Sender sender;
    final Configuration config;
    @Inject
    public LoyaltyService(Sender sender, Configuration config) {
        this.sender = sender;
        this.config = config;
    }
} 

我现在正在用Mockito测试这个服务对象。我想模拟Sender对象,但我不想模拟配置,或者至少我只想使用对象内部定义的默认值。

我如何在测试对象中做到这一点?

例如,我尝试了以下操作:

public class LoyaltyServiceTest {
    @Mock
    private Sender sender;
    @Inject
    private Configuration config;
    private LoyaltyService target;
    @Before
    public void init() {
        MockitoAnnotations.initMocks(this);
        when (sender.post(anyString(), anyString())).thenReturn("Post Success");
        target  =new LoyaltyService(sender, config);
    }
}

CDI似乎根本不会注册Config对象。这是怎么回事?谢谢

CDI似乎根本不会注册Config对象。

CDIBean在运行测试时没有初始化,只有模拟对象被初始化。

MockitoAnnotations.initMocks仅初始化

为给定的testClass用Mockito注释注释的对象:@Mock、@Spy、@Captor、@InjectMocks。

您需要在测试类中使用CDI测试框架,如CDI-unit或Pax-Exam,为您创建非模拟bean。

相关内容

  • 没有找到相关文章

最新更新