在 JBoss 容器中使用 RestEasy 时,我有一个带 注释的 ,它可以访问 和 通过注释,如下所示:ExceptionMapper@ProviderHttpServletRequestHttpServletResponse@Context
@Provider
public class MyExceptionMapper implements ExceptionMapper<Throwable> {
@Context
private HttpServletRequest httpServletRequest;
@Context
private HttpServletResponse httpServletResponse;
@Override
public Response toResponse(final Throwable exception) {
...
return response;
}
}
我是ResteEasy的新手,来自Spring背景,所以天真地认为我能够注入这两个字段并在单元测试中模拟它们,但这似乎比我预期的要难!
如果模拟框架是相关的,我正在使用JMockit,并且也是新手。到目前为止,我已经能够将我对莫基托的知识应用到它上面,并取得了很大的成功。
通过搜索这个主题,我没有找到太多,除了很多在我的单元测试中运行嵌入式容器的建议。我并不完全反对这一点,但是当我只是试图编写一个简单的单元测试时,这感觉有点过分了。
我在测试中尝试了几件事,最近一次是这样的:
public class MyExceptionMapperTest {
@Injectable
private HttpServletRequest httpServletRequest;
@Injectable
private HttpServletResponse httpServletResponse;
@Tested
private MyExceptionMapper exceptionMapper;
@Test
public void test() {
exceptionMapper.toResponse(new Throwable());
}
}
但是这导致我第一次提到其中一个字段,它告诉我它们没有被注入。NullPointerExceptionMyExceptionMapper@Context
我也尝试过:
使用 而不是@Mocked
@Injectable
;
直接实例化有和没有注释;MyExceptionMapper
@Tested
在我的测试中创建;和Expectations
上述各项的排列
在所有情况下,带注释的字段都是 。@Context
null
希望我只是错过了一些非常明显的东西?
慕桂英4014372
相关分类