Dire che ho una classe "ClasseA", che ha una dipendenza da una classe "ClasseB" (iniettata nel ctr di Classe A). Voglio prendere in giro ClassB in modo da poter testare ClassA in isolamento. Entrambe le classi sono interne.Mocking di classi interne con Moq per il test dell'unità
mi corregga se sbaglio, ma sembra che Moq può deridere solo una classe se è pubblica, ha un costruttore senza parametri pubblica, ed i metodi da deriso sono public virtual
. Non voglio davvero rendere queste classi pubblicamente visibili. Mi manca qualcosa con Moq, o non è adatto per quello che voglio fare?
Immagino di poter creare un'interfaccia (ad esempio "IClassB") implementata da ClassB, inserirla in ClassA e simulare l'interfaccia. ClassB può ancora essere interno (anche se mi rendo conto che i metodi dell'interfaccia dovrebbero essere pubblici). Mentre ciò funzionerebbe, mi sento a disagio nel creare molte interfacce, il cui unico scopo è quello di supportare il test delle unità. Pensieri?
Utile da sapere, grazie. Tuttavia ora ho deciso di mantenere pubbliche le classi (almeno quelle in fase di test). Penso che stavo rimanendo impiccato a cercare di rendere tutto interno, ma è solo un'app desktop quindi non è così cruciale come sarebbe in (dire) un assembly/API che veniva dato ai clienti. –
Post molto utile, ero molto confuso da InternalsVisibleTo ("IntegrationTests") non funzionava. Quindi aveva senso che non fosse il mio assembly ad accedervi ma l'assembly creato dinamicamente da Castle. –