Nel mio lavoro stiamo usando Moq per il mocking e Unity per un container IOC. Sono abbastanza nuovo in questo e non ho molte risorse al lavoro per aiutarmi a determinare le migliori pratiche che dovrei usare.Modo corretto per falsificare gli oggetti repository per i test unitari usando Moq e Unity
Al momento, ho un gruppo di interfacce di repository (Es: IRepository1, IRepository2 ... IRepository4) che un particolare processo deve utilizzare per svolgere il proprio lavoro.
Nel codice reale posso determinare tutti gli oggetti IRepository utilizzando il contenitore IOC e utilizzando il metodo RegisterType().
Sto cercando di capire il modo migliore per essere in grado di testare il metodo che richiede i 4 repository citati.
Stavo pensando che potrei semplicemente registrare una nuova istanza del container Unity IOC e chiamare RegisterInstance sul container per ogni oggetto mock che passa nel valore Mock.Object per ognuno. Sto cercando di rendere riutilizzabile questo processo di registrazione, quindi non devo continuare a ripetere la stessa operazione più volte per ciascun test di unità, a meno che un test unitario non richieda alcuni dati specifici per tornare dal repository. È qui che si trova il problema ... qual è la migliore pratica per impostare i valori previsti su un repository fittizio? Sembra che se chiami RegisterType nel contenitore Unity, perderò un riferimento all'oggetto Mock effettivo e non sarei in grado di sovrascrivere il comportamento.
Grazie! Stavo solo guardando le cose nel modo sbagliato. –
Ho scremato la tua risposta e stavo pensando se fosse necessario o meno (perché sembrava che stavi raccomandando di usare il contenitore IoC nei test unitari) e poi ho effettivamente letto la tua risposta ... Volevo dire, ecco il mio vergognoso +1 . Se le persone lo trovano utile anche oggi, dovresti usare ** ArgumentNullException (nameof (repository)) ** e non ** ArgumentNullException ("repository") ** - il post è stato scritto 5-6 anni fa quando questa funzione non esisteva . – Margus