gpt4 book ai didi

java - CDI @Alternative - 根据测试用例选择备选方案

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:54:46 26 4
gpt4 key购买 nike

我想知道在使用 CDI 时如何指定在测试期间应该使用哪个模拟实现。

我知道我可以用@Alternative 标记一个模拟实现,但是我需要在 beans.xml 中定义它。我想要多个模拟(针对多个对象)。假设我有一个 OrderService 和一个 EmailService。我正在编写一些不希望 EmailService 发送电子邮件的验收测试。然后是另一组测试,它们是系统测试 - 我确实想发送电子邮件,但不应创建真正的订单。

理想的解决方案是为每个测试方法调用指定备选方案,如下所示:

@BeforeMethod
public void before(){
// in this test suite we're using mock email service
addAlternative(MockEmailService.class);
}
@Test
public void testMyStuff(){
issueAnOrder(); // and verify that it worked. no emails sent!
}

这可能吗?

最佳答案

CDI-Unit 内置了对模拟的支持 http://jglue.org/cdi-unit/只需在您的测试类中将模拟指定为生产者字段即可。

class Starship {

@Inject
Engine engine; //This will be mocked

void start() {
engine.start();
}
}


@RunWith(CdiRunner.class)
class TestStarship {

@Inject
Starship starship;

@Produces
@Mock // Mockito will create a mock for us.
Engine engine;

@Test
public void testStart() {
starship.start();

// Verify that the mocks start method is called at least once.
Mockito.verify(engine, Mockito.atLeastOnce()).start();
}
}

关于java - CDI @Alternative - 根据测试用例选择备选方案,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13615018/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com