Domanda

Sto scrivendo un spock unit test che mette alla prova un metodo di controllo.

L'azione del controller in prova un'istanza di un nuovo oggetto istanza di dominio e chiamate convalidano su di esso prima che si salva. C'è comunque di scherno la chiamata a domainInstance.validate () in modo da può rendere tornare quello che voglio? O devo nascondere questa instanciation e il salvataggio dietro un metodo di servizio per raggiungere questo obiettivo?

Lo faccio in questo modo, perché nel contesto di uno unit test per un controllore, i vincoli di un oggetto di dominio non dovrebbe essere coinvolto. I test quelli altrove (nelle MyDomainClassTests, ovviamente). Se io voluto tenerne conto la mia prova sarebbe un'integrazione prova.

È stato utile?

Soluzione 2

Dopo un po 'sono giunti alla conclusione che quello che volevo è piuttosto complicato. Se siete in uno scenario in cui non si fa sono di utilizzare mockDomain(), si potrebbe aggiungere un metodo di Groovy metaclasse e di implementazione (restituire true o false, a seconda di quale si desidera)

Se do necessità mockDomain () perché è necessario istanze preesistenti simulazioni si è fuori di opzioni, almeno per ora, perché mockDomain () e giocherellare con i metodi metaclasse che mockDomain fornisce in realtà la volontà non mescolare.

Altri suggerimenti

Se non si posiziona il validate nell'istanza dominio stesso, ma piuttosto in un servizio, si potrebbe lasciare che il controller prendere un servizio nel suo costruttore (o meglio l'interfaccia di un servizio). Lasciate che la maniglia di servizio la convalida.

Ora per il vostro unittest di quel controller, si passerebbe in un Mock di tale interfaccia (di servizio) per il controller e configurare il finto al ritorno quello che vuoi.

Per .net posso consigliare Moq ( http://code.google.com/p/moq / )

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top