È possibile eseguire il test dell'unità?Test dell'unità non riuscito su EF Entry.State
public class MyRepository<T> where T : IdentityUser, new()
{
public async Task UpdateAsync(T user)
{
_context.Entry(user).State = EntityState.Modified;
_context.Entry(user).Property("UserName").IsModified = false;
await _context.SaveChangesAsync();
}
}
Il [TestInitialize] aggiunge 1 utente nel repository
_user = new IdentityUser { Id = "70a038cdde40" };
IDbSet<IdentityUser> users = new FakeDbSet<IdentityUser> { _user };
var dbContext = new Mock<MyDbContext<IdentityUser>>();
dbContext.Setup(x => x.Users).Returns(() => users);
_repository = new MyRepository<IdentityUser>(dbContext.Object);
e sto cercando di testare con questo
private MyRepository<IdentityUser> _repository;
[TestMethod]
public async Task UpdateUser_Success2()
{
var user = await _repository.FindByIdAsync("70a038cdde40");
Assert.IsFalse(user.EmailConfirmed, "User.EmailConfirmed is True");
user.EmailConfirmed = true;
await _repository.UpdateAsync(user);
(...)
}
Ma muore il 1 ° linea di UpdateAsync. Il test è errato o l'implementazione UpdateAsync? C'è un modo per testarlo?
Modifica
ho aggiunto come suggerito da Belogix
dbContext.Setup(x => x.Entry(It.IsAny<IdentityUser>()))
.Returns(() => dbContext.Object.Entry(_user));
Che mi si avvicina, penso, ma hanno ancora l'errore non virtuale: l'installazione non valido su un membro non virtuale: x => x.Entry (It.IsAny())
Qual è '_context' sul punto si esegue il test? Una finta di qualcosa o una cosa reale (indicando un DB)? Hai soppresso le parti pertinenti in modo tale che la chiamata sia tutta scandagliata? – Belogix
@Belogix Ho aggiornato la mia domanda spero che risponda al tuo – kooshka
No, chiudi ma se guardi la mia risposta devi imitare 'Entry' per restituire' utente' NOT 'Stato' in quanto proprietà della tua classe ... Quindi usa il mio esempio di beffeggiamento 'Entry' e riprova ... In questo modo puoi impostare lo stato ecc. Su quell'oggetto fittizio. Spero che abbia senso! – Belogix