cho*_*bo2 2 c# linq unit-testing moq
我的单元测试中有类似的东西
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)));
}
}
Run Code Online (Sandbox Code Playgroud)
我收到这个错误.
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:
Run Code Online (Sandbox Code Playgroud)
我不知道为什么.
编辑
我想我知道发生了什么.在我的方法中,我有3次调用insert方法(insert方法接受一个对象).
所以我喜欢
accountRepo.Insert(MyDomainObject);
accountRepo.Insert(MyOtherDomainObject);
accountRepo.Insert(MyOtherOtherDomainObject);
Run Code Online (Sandbox Code Playgroud)
也许那些其他2个插件可以覆盖它?我怎么能绕过这个?
问题出在这里:It.Is<MyDomainObject>(a => a.Id == 1)
.你可以从堆栈跟踪中看出来.
我会改变它: It.Is<MyDomainObject>(a => a != null && a.Id == 1)
归档时间: |
|
查看次数: |
1400 次 |
最近记录: |