簡體   English   中英

間諜 InputStream.read(byte[] buffer)

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM