java - 测试匿名类实例中的方法是否被调用

原文 标签 java unit-testing mocking anonymous-class

简介:考虑以下简化的单元测试:

@Test
public void testClosingStreamFunc() throws Exception {
    boolean closeCalled = false;
    InputStream stream = new InputStream() {
        @Override
        public int read() throws IOException {
            return -1;
        }

        @Override
        public void close() throws IOException {
            closeCalled = true;
            super.close();
        }
    };
    MyClassUnderTest.closingStreamFunc(stream);
    assertTrue(closeCalled);
}


显然,它不起作用,抱怨closed不是final

问题:在Java单元测试的上下文中,验证被测函数是否调用某些方法(例如close())的最佳或最惯用的方法是什么?

最佳答案

如何将常规类与实例变量一起使用:

class MyInputStream {
    boolean closeCalled = false;

    @Override
    public int read() throws IOException {
        return -1;
    }

    @Override
    public void close() throws IOException {
        closeCalled = true;
        super.close();
    }

    boolean getCloseCalled() {
        return closeCalled;
    }
};
MyInputStream stream = new MyInputStream();


如果您不想创建自己的类,请考虑使用任何模拟框架,例如使用Jmokit:

@Test
public void shouldCallClose(final InputStream inputStream) throws Exception {
    new Expectations(){{
        inputStream.close();
    }};

    MyClassUnderTest.closingStreamFunc(inputStream);
}

关于java - 测试匿名类实例中的方法是否被调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15637444/

相关文章:

java - @Value注释在类和bean之间的区别

linux - 如何使用unix登录和执行数据库中的命令?

testing - go中接口(interface)模拟的方法

unit-testing - 如何将远程用户设置为Jersey Client?

java - 如何使用字符串规范解析字符串?

java - Action Image Capture 在查看时导致图像模糊

java - 更新 TextView 以每秒从数组显示

c# - 同一类中的单元测试(使用条件编译)?

unit-testing - 我应该对数据访问层进行单元测试吗?这是一个很好的做法吗?怎么做?

java - 如何让 MockFTPServer 抛出异常