Ich habe ein Grails 2.2.4 Projekt, und ich versuche, einen Komponententest für ein Verfahren zu schreiben, die über lastUpdated
abfragt, etwa so:Einstellung Lastupdated eines Grails Domain-Objekt in Spock
Tile.createCriteria().list {
lt('lastUpdated', new Date() - 1)
}
Diese Methode funktioniert im wirklichen Leben gut, aber schlägt in meinen Komponententests fehl, weil ich keine Testdaten mit lastUpdated
anders als now
erstellen kann. Die Einstellung myTile.lastUpdated
funktioniert explizit nicht, da dies ein Update ist und somit den Auto-Timestamping auslöst. Das Deaktivieren der automatischen Zeitstempelung erfordert eventTriggeringInterceptor
, die in Komponententests nicht verfügbar zu sein scheint. Den Standardkonstruktor Date
zu verspotten, um andere Werte zurückzugeben, war auch keine Hilfe. Direkte SQL-Aktualisierungen sind in Komponententests überhaupt nicht verfügbar.
Ist das überhaupt in Unit Tests möglich, oder muss ich einen Integrationstest schreiben?
Persönlich denke ich, wenn Sie Ausdauer zu testen sind, sollten Sie immer einen Integrationstest bevorzugen, wenn Sie einen sehr guten Grund haben nicht zu. Wenn Sie Ihre Persistenztests für eine Im-Memory-GORM-Implementation ausführen, wird nur nach Problemen gefragt. –
Das ist fair, aber ich will nicht wirklich Persistenz testen, ich möchte meine Abfrage testen (was wirklich so einfach ist). –