运行Arquillian测试时,模拟数据在@ApplicationScoped cdi中不会更新

时间:2017-08-17 04:18:26

标签: java unit-testing mockito cdi jboss-arquillian

我正在为我的cdi bean(应用程序作用域)编写arquillian单元测试(使用@RunWith(AdnWildflyArquillianForUnitTests.class)和mockito)。 这是我的测试类的片段:

@Inject
private MyCdiBean bean;

@Mocks
@Produces
private static MyService service; // this service is called inside beanMethod

private ServiceDTO dto;
@Before
public void initData() {
   dto = new ServiceDTO();
   when(service.callServiceMethod(any())).thenReturn(dto);
}

@Test
public void test1() {
  dto.setFlag(true);
  bean.callBeanMethod();
}
@Test
public void test2() {
  dto.setFlag(false);
  bean.callBeanMethod();
}

如果我运行单一测试方法,它可以正常工作。但是当我运行测试类时,test2中的dto返回值与test1中的dto返回值相同(尽管我在调用bean之前修改了值)。如果我将cdi更改为@RequestScope,它可以正常工作。所以我认为cdi不知何故缓存我的模拟状态。我尝试了风格,但仍然不知道如何解决它(我不想改变我的cdi范围)。 有没有办法在cdi中清除状态或使模拟返回新值?请给我一些提示。 感谢。

0 个答案:

没有答案