我有一个对象读取配置属性,如下所示:
@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。