Sto passando il mouse sui miei AutoMapper dall'utilizzo di una classe di AutoMapperConfiguration di grandi dimensioni all'utilizzo dei profili effettivi. Globale ora sembra così (perdonate l'apertura/chiusura di violazione per ora)Profili AutoMapper e test unitario
Mapper.Initialize(x =>
{
x.AddProfile<ABCMappingProfile>();
x.AddProfile<XYZMappingProfile>();
// etc., etc.
});
Il pezzo chiave che mi ha fatto sopra le righe e l'ostacolo che aveva precedentemente mi ha sempre fatto desistere dall'utilizzare profili era vincolante la mia Ninject. Non potrei mai ottenere che l'associazione funzioni. Prima ho avuto questa vincolante:
Bind<IMappingEngine>().ToConstant(Mapper.Engine).InSingletonScope();
allora ho migrato a questo legame:
Bind<IMappingEngine>().ToMethod(context => Mapper.Engine);
Questo funziona ora, l'applicazione è funzionale, non ho un profilo, e le cose sono buone.
L'intoppo è ora nei miei test di unità. Usando NUnit, installerei le mie dipendenze del costruttore.
private readonly IMappingEngine _mappingEngine = Mapper.Engine;
e poi nel mio metodo [Impostazioni] mi piacerebbe costruire il mio controller MVC e chiamare la classe AutoMapperConfiguration.
[SetUp]
public void Setup()
{
_apiController = new ApiController(_mappingEngine);
AutoMapperConfiguration.Configure();
}
che ora ho modificato per.
[SetUp]
public void Setup()
{
_apiController = new ApiController(_mappingEngine);
Mapper.Initialize(x =>
{
x.AddProfile<ABCMappingProfile>();
x.AddProfile<XYZMappingProfile>();
// etc., etc.
});
}
Sfortunatamente, questo non sembra funzionare. Le mappature non sembrano essere rilevate come quando colpisco un metodo che utilizza i mapping, AutoMapper genera un'eccezione che indica che la mappatura non esiste. Qualche suggerimento su come/cosa modificare la definizione/iniezione del mapper nel test per risolvere questo problema? Immagino che la definizione del campo IMappingEngine sia il mio problema, ma non sono sicuro delle opzioni che ho.
Grazie
Mi dispiace non hanno ottenuto di nuovo a voi ancora. Ho eseguito un test e il tuo Git funziona, ma non appena provo a estrarre il motore come parametro di costruzione, le cose vanno fuori dai binari. Cercherò di tornare in giro stasera per ulteriori test. – Khepri
Ho verificato stamattina che come soluzione standalone, il tuo git fa quello che ti aspetteresti. Tuttavia, per il mio scenario in cui sto provando a passare un'istanza di IMappingEngine come parametro costruttore che utilizza Ninject, non riesco ancora a ricevere i mapping inizializzati. Ho preso il git e ho aggiunto un metodo per restituire il MappingEngine inizializzato e ho tentato di passarlo come parametro del costruttore. I risultati erano gli stessi. – Khepri
Hai provato a sostituire _all_ calls/refences a 'Mapper' (' Mapper.Initialize', 'Mapper.Engine', ecc.) Con la nuova istanza autonoma di' MappingEngine'? – Akim