Ho una classe di dominio che estende una classe astratta che inietta il servizio spring security core plugin.Come simulare un servizio immesso in una classe di dominio da una classe di test del controller?
class Extra extends WithOwner {
String name
}
abstract class WithOwner {
transient springSecurityService
User user
def getCurrentUser() {
return springSecurityService.currentUser
}
def beforeValidate() {
if(!user) {
user = getCurrentUser()
}
}
Boolean isLoggedUserTheOwner(){
return (user?.id == getCurrentUser()?.id)
}
}
Voglio implementare un test del controller.
@TestFor(ExtraController)
@Mock([Extra, User, UserRole, Role])
class ExtraControllerTests {
void testEdit() {
def utils = new TestUtils()
def user1 = utils.saveUser1()
populateValidParams(params)
def extra = new Extra(params)
extra.user = user1
assert extra.save() != null
params.id = extra.id
def model = controller.edit() // Line 69
assert model.extraInstance == extra
}
}
Se eseguo la prova di cui sopra ottengo:
test-app ExtraController.testEdit --unit --echoOut | Esecuzione di 1 test dell'unità ... 1 di 1 - Uscita da testEdit-- | Errore: testEdit (com.softamo.movilrural.ExtraControllerTests) | java.lang.NullPointerException: impossibile ottenere la proprietà 'currentUser' su oggetto nullo su com.softamo.movilrural.WithOwner.getCurrentUser (WithOwner.groovy: 8) su com.softamo.movilrural.WithOwner.isLoggedUserTheOwner (WithOwner.groovy: 18) in com.softamo.movilrural.ExtraController.edit (ExtraController.groovy: 39) in com.softamo.movilrural.ExtraControllerTests.testEdit (ExtraControllerTests.groovy: 69) | Completato test di 1 unità, 1 fallito in 853ms
ho cercato senza successo di prendere in giro il servizio di sicurezza in questo modo:
Extra.metaClass.springSecurityService = new MockSpringSecurityService(user1)
o addirittura beffardo il metodo
Extra.metaClass.getCurrentUser = { return user1 }
Qualsiasi idea di come potrei aggirare questo problema.
Ciao! Sono bloccato con lo stesso problema. Hai trovato una soluzione per la tua domanda? O forse hai un passaggio laterale per iniettare un servizio all'interno di un oggetto dominio senza auto-test autowiring? – snowindy
Qualsiasi problema con questo problema ?, con lo stesso problema. –