在c#中运行单元测试时如何处理Invalidoperationexception

时间:2016-12-28 12:49:55

标签: c# unit-testing moq

我使用MOQ编写了单元测试。设置模拟我试图在Linq查询中创建类的对象。之后,我试图运行单元测试,但我得到以下错误消息。

  

"从' VisitMemberInit'调用时,重写类型的节点   ' System.Linq.Expressions.NewExpression'必须返回非null值   相同类型。或者,覆盖' VisitMemberInit'并改变   它不会访问这种类型的孩子。"

我写了如下代码 -

    _mockLdapAuthenticatorService.Setup(x => x.Authenticate(
                        new LoginRequest { 
                                Username = It.IsAny<string>(), 
                                Password = It.IsAny<string>() })).
                                Returns(new     AuthenticationResult { Success = true });

2 个答案:

答案 0 :(得分:4)

更新设置。以下可能是您想要实现的目标。

_mockLdapAuthenticatorService
   .Setup(x => x.Authenticate(It.IsAny<LoginRequest>()))
   .Returns(new AuthenticationResult { Success = true });

答案 1 :(得分:0)

对我来说,一个问题是当向函数发送参数时,这个新运算符。当我为它创建一个变量然后将其作为参数发送时,它可以正常工作。

否:

 var absentUser = _fixture.Create<User>();
  var absentUsers = new List<User> { absentUser }.AsQueryable();
  _unitOfWorkMock.Setup(_ => _.UserRepository
  .GetAllConfirmedUsersForGroupIds(new List<int> { It.IsAny<int>() }))
                   .Returns(absentUsers);

是:

var absentUser = _fixture.Create<User>();
 var absentUsers = new List<User> { absentUser }.AsQueryable();
 var groupIds = new List<int> { It.IsAny<int>() };
 _unitOfWorkMock.Setup(_ => _.UserRepository.GetAllConfirmedUsersForGroupIds(groupIds))
                   .Returns(absentUsers);