您可以通过在测试中以编程方式配置 CDI 容器来做到这一点。
为此,disableDiscoveryMode()请在您的测试类中设置您的 CDI 容器,将测试所需的类添加到容器中(至少是您的测试主题和替代类),并将替代类添加为替代类。
下面举个例子。Greeter 是我的测试对象, Greeting 是默认 bean, GreetingAlt 是替代品。
测试类:
public class GreeterTest {
private Greeter greeter;
@Before
public void setUp() {
try (WeldContainer container = new Weld().disableDiscovery()
.addBeanClass(Greeter.class)
.addBeanClass(Greeting.class)
.addBeanClass(GreetingAlt.class)
.addAlternative(GreetingAlt.class).initialize()) {
greeter = container.select(Greeter.class).get();
}
}
@Test
public void hiShouldContainMock() {
assertThat(greeter.hi(), containsString("Mock"));
}
}
主要课程:
public class Greeter {
@Inject IGreeting iGreeting;
public String hi() { return iGreeting.greet("John"); }
}
@Default
public class Greeting implements IGreeting {
@Override public String greet(String name) { return "Hello " + name; }
}
@Alternative
public class AltGreeting implements IGreeting {
@Override public String greet(String name) { return "Mock " + name; }
}