Skip to content

Why I don’t like GMock


I don’t like GMock.

It’s not as if it was badly written or designed. But it lets you to unit-test dirtier code, tying to method call structure instead of resulting data.

For instance, this GMock code can be rewritten:

[sourcecode]
loggingService.sendNotification(match{ !it.shouldNotify() }).stub()
loggingService.sendNotification(match {
it.shouldNotify() && it instanceof HubOfflineNotification && it.deadEntities == [hub]
})
loggingService.saveEvent(LogEventType.HUB_BECAME_OFFLINE, match { it }, customer)
loggingService.saveEvent(LogEventType.CAMERA_DIED, match { it }, customer).never()

play {
loggingService.reportHealth(diff)
}
[/sourcecode]

to:
[sourcecode]
eventLogService.reportHealthDiff(diff)

assertEquals 1, LogEvent.countByEventType(LogEventType.AGENT_BECAME_OFFLINE)
assertEquals 0, LogEvent.countByEventType(LogEventType.METER_BECAME_DEAD)
assertEquals 1, LogEvent.countByEventType(LogEventType.SENDING_NOTIFICATION)
[/sourcecode]

which relies only to call outcome, and not to implementation details.

Post a Comment

Your email is never published nor shared.