단위 테스트가 가능합니까? 단위 테스트가 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();
}
}
는 [TestInitialize]은 저장소
_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);
1 사용자를 추가하고 나는이
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);
(...)
}
으로 테스트하기 위해 노력하고있어하지만 UpdateAsync의 첫번째 줄에 죽는다. 테스트가 잘못되었거나 UpdateAsync 구현입니까? 내가 그것을 테스트 할 수있는 방법이 있습니까? 가상이 아닌 구성원의 잘못된 설정 : Belogix 나는 생각하지만, 여전히 비가 상 오류가 가까이 저를 얻을 수
dbContext.Setup(x => x.Entry(It.IsAny<IdentityUser>()))
.Returns(() => dbContext.Object.Entry(_user));
에 의해 제안
편집
내가 추가 : x => x.Entry (It.IsAny())
당신은 당신의 테스트를 실행? DB를 가리키는 무언가 또는 실물의 조롱? 관련 부품을 스터브 했으므로 전화가 모두 연결됩니다. – Belogix
@Belogix 나는 당신의 대답에 대한 희망을 업데이트했습니다. – kooshka
아니요, 닫습니다.하지만 내 대답을 보면'entry'가'user'가 아니라'State'가 아닌 클래스를 반환 할 수있는 모의이 필요합니다 ... 그래서'Entry'를 조롱하는 예제를 사용하고 다시 시도하십시오 ... 그런 식으로 그 모의 객체에 상태 등을 설정할 수 있습니다. 희망은 그것이 의미가 있습니다! – Belogix