(五)多次模拟
对于一些特定方法,有可能需要调用多次。如果多次重复设置会产生不必要的麻烦,可以通过相应的方法来设置模拟次数。
1. mockLoader.load(2).returns(3).atLeastOnce() 2. play { 3. assertEquals 3, mockLoader.load(2) 4. assertEquals 3, mockLoader.load(2) 5. } |
这里的atLeastOnce()表示该方法至少会被调用一次。还有如下几种方法用来设置调用次数。
(六)顺序调用
如果一些方法的执行顺序有严格的要求,可以使用ordered方法来确定方法的调用顺序。
1. def database = mock() 2. def cache = mock() 3. ordered { 4. database.open() 5. cache.get("select * from cat").returns(null) 6. database.query("select * from cat").returns(["cat1", "cat2"]) 7. cache.put("select * from cat", ["cat1", "cat2"]) 8. database.close() 9. } |
(七)方法的正则表达方式模拟
如果一些需要模拟的方法名有一些规则,可以使用正则表达式匹配的方法批量模拟。
1. def mock = mock() 2. mock./set.*/(1).returns(2) 3. play { 4. assertEquals 2, mock.setSomething(1) 5. } |
(八)默认模拟
Gmock默认实现了equals()、hashCode()和toString()的模拟。
* never() 从来不被调用
* once() 默认情况,只被调用一次
* atLeastOnce() 至少被调用一次
* atMostOnce() 最多一次(0或1)
* stub() the expectation can be called anytime
* times(n) 被调用n次。
* times(m..n) 被调用m-n次。
* atLeast(n) 被调用至少n次
* atMost(n) 被调用至多n次
相关阅读: