나는 FakeItEasy에서 이상한 문제를 경험합니다.FakeItEasy는 전화를 찾지 못하지만
단위 테스트 방법에 따라 상상 :
[TestMethod]
public void DeletePerson_WhenCalled_ThenPersonIsDeleted()
{
const int personId = 24;
var commonParam = new CommonParam();
this.testee.DeletePerson(commonParam, personId);
A.CallTo(() => this.personRepository.DeletePersons(commonParam, new[] {personId }, false)).MustHaveHappened(Repeated.Exactly.Once);
A.CallTo(() => this.personRepository.SaveChanges()).MustHaveHappened(Repeated.Exactly.Once);
}
testee.DeletePerson
-method은 다음과 같습니다
public ResultatModel DeletePerson(CommonParam commonParam, int personId)
{
this.personRepository.DeletePersons(commonParam, new[] { personId });
this.personRepository.SaveChanges();
}
그리고 personRepository.DeletePersons
(하지만이 하나 ... fakeiteasy에 의해 위조됩니다) :
public void DeletePersons(CommonParam commonParam, IEnumerable<int> ids, bool hardRemove = false)
{
var persons = Entities.per_person.Where(e => ids.Contains(e.personId)
&& (e.accountId == null || e.accountId == commonParam.AccountId)).ToList();
if (hardRemove)
{
Entities.per_person.RemoveRange(persons);
}
else
{
persons.ForEach(person =>
{
person.geloescht = true;
person.mutationsBenutzer = commonParam.DbIdent;
person.mutationsDatum = DateTime.Now;
});
}
}
이 때문에 테스트가 실패하는 이유는
입니다.시험 방법 DataService.Test.PersonServiceTest.DeletePerson_WhenCalled_ThenPersonIsDeleted은 예외를 던졌다 : FakeItEasy.ExpectationException :
어설 다음 호출에 실패했습니다 RepositoryContract.IPersonRepository.DeletePersons (commonParam : Commons.CommonParam, IDS : 시스템. INT32 [], hardRemove : 거짓) 은 통화 중이 # 0 번을 정확히 한 번만 찾을 것으로 예상하지만, 발견 1 : RepositoryContract.IPersonRepository.RequestInfo = 위조 Commons.Session.RequestInfo 2 : RepositoryContract.IPersonRepository.DeletePersons을 ( commonParam : Commons.CommonParam, IDS : 3) 거짓 : 선택 System.Int32 [], hardRemove RepositoryContract.IPersonRepository.SaveChanges()
왜 테스트가 실패 하는가?
new[] { ... }
은 문제가 아닙니까? 사전에
감사
흠 당신은 확신? 제 말은'new [] {...}'도'IEnumerable '입니까? 'new List {...}'호출을 변경하려고 시도했지만 여전히 작동하지 않습니다 .-- ( –
xeraphim
런타임에 컴파일 타임에 없습니다. . – dbencs