Groovy半模拟与MockFor

时间:2016-07-22 17:11:27

标签: groovy junit mocking

我想测试以下课程:

public class DBSync {

    public dbNotify( String path ) {
        if (!path) {
            return
        }

        def pathIndex = path.lastIndexOf(File.separator)
        if (pathIndex > 0) {
            def folder = path[0..pathIndex - 1]
            def fileName = path[pathIndex + 1..path.length() - 1]
            println "Syncing from directory $folder for filename $fileName"
            if (fileName.contains(EXCLUDE_FILE_PATTERN)) {
                println "Filename is $EXCLUDE_FILE_PATTERN skipping db write "
                return
            }
            writeToDB(folder, fileName)
        }
    }

    public writeToDB ( folder, file ) { 
        // inserting to database
    }
}

测试类是:

public class TestDBSync {
    @Test
    public void test() {
        def dbSyncContext = new MockFor(DBSync)
        def file = "file.zip"
        def folder = "data"
        def path = folder  + File.separator + file
        def called = false
        // Expect at least one call
        mockDBSyncContext.demand.writeToDB(1..1) { String folderargs, String fileargs ->  called = true    }
        mockDBSyncContext.demand.dbNodify(1..1)  {  String pathargs -> return  }

        // Obtaining a usuable mock instance
        def mockDBSyncProxy = mockDBSyncContext.proxyInstance()

        // Fake calling the method
        mockDBSyncContext.use {
            mockDBSyncProxy.dbNotify(path )
        }

        // Verify invoked at least once?
        mockDBSyncContext.verify(mockDBSyncProxy)
    }
}

测试失败,我收到以下错误:

  

junit.framework.AssertionFailedError:未预期调用'dbNotify'   在此刻。仍然有1次调用'writeToDB'预期。

0 个答案:

没有答案