mock:在mock InputStream#read(byte[])上出现异常



我想让InputStream返回我想要的值。所以我这样做:

doAnswer(new Answer<Byte[]>() {
    @Override
    public Byte[] answer(InvocationOnMock invocationOnMock) throws Throwable {
        return getNextPortionOfData();
    }
}).when(inputMock).read(any(byte[].class));
private Byte[] getNextPortionOfData() { ...

异常: java.lang.Byte; cannot be cast to java.lang.Number

问题:为什么? !为什么会出现这个异常?

您试图从调用中返回Byte[] -但InputStream.read(byte[])返回读取的字节数,并将数据存储在参数引用的字节数组中。

所以你需要这样写:

doAnswer(new Answer<Integer>() {
    @Override
    public Integer answer(InvocationOnMock invocationOnMock) throws Throwable {
        Byte[] bytes = getNextPortionOfData();
        // TODO: Copy the bytes into the argument byte array... and
        // check there's enough space!
        return bytes.length;            
    }
});

然而,我可能不会为此使用mock——如果绝对必要,我会使用fake,否则使用ByteArrayInputStream。我只对真正的细粒度控制使用模拟,例如"如果我的编码文本输入流在一次调用中返回字符的前半部分,然后在下一次调用中返回其余部分,会发生什么?"

相关内容

  • 没有找到相关文章

最新更新