mercoledì 16 aprile 2008

TypeMock ed i costruttori statici

Ultimamente mi sono imbattuto in un problema di TypeMock veramente subdolo. Lo scenario e' il seguente: supponete di avere una classe X, dotata di costruttore statico (dove, ad esempio, viene inizializzato un membro statico, come un hash o un array).

Supponete di scrivere una fixture dove la classe X viene mockizzata. Supponete poi di scrivere una fixture che testa proprio la classe X. Ebbene, se l'ordine di esecuzione e' questo, allora la seconda fixture probabilmente fallira'.

A quanto pare, TypeMock in qualche modo provoca l'esecuzione del costruttore statico al momento della mockizzazione (cosa usualmente non richiesta) ma, quando poi viene instanziato un oggetto della classe X per la prima volta tale costruttore non viene piu' richiamato. Il problema e' veramente subdolo, poiche' il successo o fallimento dei test dipende dall'ordine di esecuzione dei test.

Fortunatamente, c'e' la soluzione. Basta dire a TypeMock di non mockizzare il costruttore statico, cosi:

MockManager.Mock(typeof(X), Constructor.StaticNotMocked);

Nessun commento: