我已經基於澤西島的ContainerRequestFilter構建了一個小認證過濾器。對ContainerRequestFilter的junit測試 - 驗證WebApplicationException的實體
當請求未經授權時,會引發一些WebAplicationException,並且我想測試它。
我已經有這個,檢查要調用的濾波方法時,將引發異常並要求未經授權:
@Category(CommitTest.class)
public class BasicAuthenticationFilterTest {
@Rule
public ExpectedException thrown = ExpectedException.none();
@Test
public void someInvalidAuthTest() throws IOException {
//...setup auth filter, and mock objects
//Expect an WebApplicationException
thrown.expect(WebApplicationException.class);
authenticationFilter.filter(mockRequestContext);
}
}
我能做到這一點就好了,我的測試運行正常。但我希望能夠驗證異常的響應。
編輯
爲了澄清,我通常把我的例外情況是這樣的:
ApiError error = new ApiError(1, "UNAUTHORIZED", "No or empty authorization header");
throw new WebApplicationException(
error.getMessage(),
Response.status(Response.Status.UNAUTHORIZED).entity(error).build());
我要驗證無論是在拋出的異常反應和實體。現在我知道這可能不可能。但我不得不要求確定。
或者我應該這樣測試一個完全不同的方式,並且實際設置了一個使用我的驗證過濾器的內存中類型的「服務器」,並向它做出實際的請求(然後驗證響應?)
你是什麼「異常的反應均「?像異常消息?或者HTTP狀態碼? – Alden
我通常創建一個響應,持有一個實體,當我拋出異常(響應和實體可能是球衣處理所有本身) - 我想驗證此實體,而不僅僅是異常類型+消息。 (儘管現在會這樣做)。 –
好的感謝澄清,我更新了我的答案,以顯示我如何在我的項目中做到這一點。但是我通常也會將它作爲集成測試,並在預集成測試階段啓動服務器,所以實際上我沒有將它作爲單元測試運行。 – Alden