第七色在线视频,2021少妇久久久久久久久久,亚洲欧洲精品成人久久av18,亚洲国产精品特色大片观看完整版,孙宇晨将参加特朗普的晚宴

為了賬號安全,請及時綁定郵箱和手機(jī)立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

如何將帶@Context注釋的字段注入到 RestEasy @Provider中?

如何將帶@Context注釋的字段注入到 RestEasy @Provider中?

慕哥6287543 2022-09-28 15:49:08
在 JBoss 容器中使用 RestEasy 時,我有一個帶 注釋的 ,它可以訪問 和 通過注釋,如下所示:ExceptionMapper@ProviderHttpServletRequestHttpServletResponse@Context@Providerpublic class MyExceptionMapper implements ExceptionMapper<Throwable> {  @Context  private HttpServletRequest httpServletRequest;  @Context  private HttpServletResponse httpServletResponse;  @Override  public Response toResponse(final Throwable exception) {    ...    return response;  }}我是ResteEasy的新手,來自Spring背景,所以天真地認(rèn)為我能夠注入這兩個字段并在單元測試中模擬它們,但這似乎比我預(yù)期的要難!如果模擬框架是相關(guān)的,我正在使用JMockit,并且也是新手。到目前為止,我已經(jīng)能夠?qū)⑽覍δ械闹R應(yīng)用到它上面,并取得了很大的成功。通過搜索這個主題,我沒有找到太多,除了很多在我的單元測試中運(yùn)行嵌入式容器的建議。我并不完全反對這一點(diǎn),但是當(dāng)我只是試圖編寫一個簡單的單元測試時,這感覺有點(diǎn)過分了。我在測試中嘗試了幾件事,最近一次是這樣的:public class MyExceptionMapperTest {  @Injectable  private HttpServletRequest httpServletRequest;  @Injectable  private HttpServletResponse httpServletResponse;  @Tested  private MyExceptionMapper exceptionMapper;  @Test  public void test() {    exceptionMapper.toResponse(new Throwable());  }}但是這導(dǎo)致我第一次提到其中一個字段,它告訴我它們沒有被注入。NullPointerExceptionMyExceptionMapper@Context我也嘗試過:使用 而不是@Mocked@Injectable;直接實(shí)例化有和沒有注釋;MyExceptionMapper@Tested在我的測試中創(chuàng)建;和Expectations上述各項的排列在所有情況下,帶注釋的字段都是 。@Contextnull希望我只是錯過了一些非常明顯的東西?
查看完整描述

1 回答

?
慕桂英4014372

TA貢獻(xiàn)1871條經(jīng)驗(yàn) 獲得超13個贊

在沒有更好的答案的情況下,我最終在測試中使用反射來注入這兩個屬性的值。不理想,但它的工作原理:


public class MyExceptionMapperTest {

  @Mocked

  private HttpServletRequest mockHttpServletRequest;


  @Mocked

  private HttpServletResponse mockHttpServletResponse;


  private MyExceptionMapper exceptionMapper = new MyExceptionMapper();


  @Before

  public void setup() {

    Field httpServletRequest = exceptionMapper.getClass().getDeclaredField("httpServletRequest");

    httpServletRequest.setAccessible(true);

    httpServletRequest.set(exceptionMapper, mockHttpServletRequest);


    Field httpServletResponse = exceptionMapper.getClass().getDeclaredField("httpServletResponse");

    httpServletResponse.setAccessible(true);

    httpServletResponse.set(exceptionMapper, mockHttpServletResponse);

  }

}

然后,在我的測試中,我可以像往常一樣對這兩個值設(shè)置期望和驗(yàn)證。@Mocked


我不是反思方面的專家,所以這可能不是最好/最有效的方法,但它足以滿足我的需求。


查看完整回答
反對 回復(fù) 2022-09-28
  • 1 回答
  • 0 關(guān)注
  • 105 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補(bǔ)貼
聯(lián)系客服咨詢優(yōu)惠詳情

幫助反饋 APP下載

慕課網(wǎng)APP
您的移動學(xué)習(xí)伙伴

公眾號

掃描二維碼
關(guān)注慕課網(wǎng)微信公眾號