Groovy Mock For要求不按预期的方式执行流

时间:2015-05-30 04:31:12

标签: unit-testing groovy stream mocking

我想创建一个单元测试来验证流是否已关闭。我的类使用DataputStream修饰它接收的流,这似乎打破了模拟需求功能。

if(song1.equals(song2)){ .... }

特定错误消息:

  

junit.framework.AssertionFailedError:verify [0]:预期1..1次调用为“关闭”,但被称为0次。

我检查了DataInputStream的源代码,并且正如预期的那样,传递给构造函数的流是它委托close()方法调用的对象。

void testBadMock() {
    def mockInputClass = new MockFor(InputStream)
    mockInputClass.demand.with {
        close() {}
    }

    def mockInput1 = mockInputClass.proxyInstance()
    mockInput1.close()
    mockInputClass.verify mockInput1 // passes

    def mockInput2 = mockInputClass.proxyInstance()
    new DataInputStream(mockInput2).close()
    mockInputClass.verify mockInput2 // fails
}

我认为没有理由为什么我的模拟对象没有看到close()方法调用。

1 个答案:

答案 0 :(得分:1)

潜在的解决方法:

def mockInput2 = mockInputClass.proxyInstance() 
new DataInputStream([close: { mockInput2.close() }] as InputStream).close() 
mockInputClass.verify mockInput2