I have something like this in my unit test
public class MyTestClass()
{
private Mock<IAccountRepo> accountRepo;
private AdminService adminService;
[Setup]
public void Setup()
{
accountRepo = fixture.Freeze<Mock<IAccountRepo>>();
adminService = fixture.CreateAnonymous<AdminService>();
}
[Test]
public Test()
{
accountRepo.Setup(x => x.Insert(It.IsAny<IUnitOfWork>(), It.IsAny<MyDomainObject>()));
adminService.ApplyAdminFee(1, 1, today);
accountRepo.Verify(x => x.Insert(It.IsAny<IUnitOfWork>(), It.Is<MyDomainObject>(a => a.Id == 1)));
}
}
I get this error.
System.NullReferenceException was unhandled by user code
Message=Object reference not set to an instance of an object.
Source=Anonymously Hosted DynamicMethods Assembly
StackTrace:
at lambda_method(Closure , MyDomainObject )
at Moq.It.<>c__DisplayClass2`1.<Is>b__1(TValue value)
at Moq.Match`1.Matches(Object value)
at Moq.Matcher.Matches(Object value)
at Moq.MethodCall.Matches(IInvocation call)
at Moq.Mock.<>c__DisplayClassc.<VerifyCalls>b__b(IInvocation i)
at System.Linq.Enumerable.WhereListIterator`1.MoveNext()
at System.Linq.Enumerable.Count[TSource](IEnumerable`1 source)
at Moq.Mock.VerifyCalls(Interceptor targetInterceptor, MethodCall expected, Expression expression, Times times)
at Moq.Mock.Verify[T](Mock mock, Expression`1 expression, Times times, String failMessage)
at Moq.Mock`1.Verify(Expression`1 expression, Times times)
at Test() in 383
InnerException:
I am not sure why.
Edit
I think I know what is happening. in my method I have 3 calls to the insert method(the insert method takes in an object).
So I have like
accountRepo.Insert(MyDomainObject);
accountRepo.Insert(MyOtherDomainObject);
accountRepo.Insert(MyOtherOtherDomainObject);
So maybe those 2 other inserts are overriding it? how can I get around this?
The problem is in here: It.Is<MyDomainObject>(a => a.Id == 1)
. You can tell from the stack trace.
I would change it like this: It.Is<MyDomainObject>(a => a != null && a.Id == 1)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.