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:
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) }
to:
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)
which relies only to call outcome, and not to implementation details.
Post a Comment