[英]Spy InputStream.read(byte[] buffer)
我正在嘗試創建一個測試,其中第三個請求將拋出錯誤並驗證前一個請求的輸入。
@Test
void sample() throws IOException {
var is = spy(new ByteArrayInputStream(new byte[]{0, 1, 2, 3, 4, 5, 6, 7, 8, 9}));
doReturn(3, 3, 3)
.doThrow(new IOException("FOO"))
.when(is)
.read(any());
byte[] buf = new byte[3];
assertThat(is.read(buf)).isEqualTo(3);
assertThat(buf).isEqualTo(new byte[]{0,1,2});
}
我得到的是
expected: [0, 1, 2]
but was: [0, 0, 0]
這是 Mockito spy
的限制還是我遺漏了什么。
因為我想要正常的行為,所以實際上有一個doCallRealMethod()
Stubber
可以使用,而不必返回將按預期更新緩沖區的值。
@Test
void validateSpyByteInputStream() throws IOException {
var is = spy(new ByteArrayInputStream(new byte[] {0, 1, 2, 3, 4, 5, 6, 7, 8, 9}));
doCallRealMethod()
.doCallRealMethod()
.doCallRealMethod()
.doThrow(new IOException("FOO"))
.when(is)
.read(any(byte[].class));
byte[] buf = new byte[3];
assertThat(is.read(buf)).isEqualTo(3);
assertThat(buf).isEqualTo(new byte[] {0, 1, 2});
assertThat(is.read(buf)).isEqualTo(3);
assertThat(buf).isEqualTo(new byte[] {3, 4, 5});
assertThat(is.read(buf)).isEqualTo(3);
assertThat(buf).isEqualTo(new byte[] {6, 7, 8});
assertThatThrownBy(() -> is.read(buf)).isInstanceOf(IOException.class).hasMessage("FOO");
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.