In Visual Studio 2015 ho un progetto di test a cui ho aggiunto un assemblaggio di falsi.Metodo spianato non utilizzato dal test in modalità di rilascio
Nel test unità stessa a creare uno spessore di un metodo generico statico che restituisce un'istanza di tipo generico, ad esempio:
using (ShimsContext.Create())
{
ShimStaticClass.TheMethod<MyType>(() => instanceOfMyType);
// ... code that uses StaticClass.TheMethod here ...
}
Quando la soluzione è costruita in modalità debug test funziona bene e passa. Tuttavia, quando la soluzione viene creata nella modalità di rilascio , la versione ridotta di TheMethod non viene chiamata, causando il fallimento del test.
So che il metodo spessorato non è chiamato perché ho cambiato per generare un'eccezione facendo:
using (ShimsContext.Create())
{
ShimForStaticClass.TheMethod<MyType>(() =>
{
throw new InvalidOperationException("Shim was called");
});
// ... code that uses StaticClass.TheMethod here ...
}
e questa eccezione non viene generata.
Ho attivato la registrazione diagnostica e la verbosità rumorosa per il falso ma i registri di generazione non indicano alcun problema.
Provare a disattivare le ottimizzazioni in modalità di rilascio, ricostruire e rieseguire i test. È possibile che il compilatore non creda che il metodo debba essere chiamato? – sQuir3l
Quindi, disattivando le ottimizzazioni in modalità di rilascio non ha funzionato per il progetto di test (dove si fa riferimento ai Fakes). Tuttavia, funzionava quando si disattivavano le ottimizzazioni sul progetto che conteneva il codice da testare. La mia presunzione, ora, è che il compilatore sta inserendo la chiamata a "StaticClass.TheMethod", dato che il codice è in esecuzione come previsto quando viene eseguito utilizzando la build di rilascio. Non penso che la disattivazione delle ottimizzazioni sarà comunque una soluzione valida per questo eseguibile. –
Chrisgh
Non è una soluzione, ma potrebbe essere un passo nella giusta direzione. Potresti forse vedere perché pensa che l'invocazione del metodo possa essere saltata e che possibilmente ci sia un miglioramento nel codice che può essere fatto. – sQuir3l