Ho una classe AccountController, qui il suo ctor:
public AccountController(
UserManager<User> userManager,
SignInManager<User> signInManager,
RoleService roleService,
IConfiguration configuration)
{
_userManager = userManager;
_signInManager = signInManager;
_roleService = roleService;
_configuration = configuration;
}
RoleService è la mia classe.
Ho creato un progetto xUnit Test e utilizzo Entity Framework Core per evitare il mocking e la falsificazione del database. Uso il metodo UseInMemoryData :
var options = new DbContextOptionsBuilder<ApplicationDbContext>()
.UseInMemoryDatabase(Guid.NewGuid().ToString())
.Options;
var context = new ApplicationDbContext(options);
Ma non capisco come posso testare AccountController, strega inietta UserManager<User>, SignInManager<User>
e così via. Come posso creare un'istanza della classe AccountController?
Normalmente non creo un test unitario per controllori, perché abbiamo bisogno di prendere in giro molte cose ed è un duro lavoro.
Se pensi che il tuo controller chiama solo un altro pezzo di codice come Application Service o Command Handler puoi coprire il tuo controller con test di integrazione e creare Unit Test per i tuoi Command Handler o Application Service o qualsiasi tier che abbia la tua logica di business .
Ma forse se vuoi davvero creare un test unitario sul tuo controller, devi creare una simulazione di tutte le dipendenze di cui hai bisogno nei tuoi controller usando un framework come Moq.
Spero che questo aiuto: D