Как мне настроить это в Moq, чтобы дать мне ноль или объект? - PullRequest
0 голосов
/ 23 мая 2018

Я хочу видеть, что мне все равно, что находится в предложении Find.Просто дайте мне ноль.

Вот тест

[Fact]
public void VerifyIndexViewType()
{
    // Arrange
    var mockUserProvider = new Mock<IUserProvider>();
    mockUserProvider.Setup(x => x.GetUserId()).Returns("any-value-here");
    var mockUnitOfWork = new Mock<IUnitOfWork>();
    //how would I just return an object or null for example.. this doesnt work
   // mockUnitOfWork.Setup(x => x.UserProfileDataRepository.Find(u => u.ApplicationUserId == "any value here")).Returns((IRepository<UserProfileData>)null);

    var controller = new ProfileController(mockUnitOfWork.Object, mockUserProvider.Object);

    // Act
    var result = controller.Update();

    // Assert
    Assert.IsType<ViewResult>(result);
}

Для следующего контроллера и действия

public class ProfileController : BaseController
{
    private IUnitOfWork _unitOfWork;
    private readonly IUserProvider _requestUserProvider;

    public ProfileController(IUnitOfWork unitOfWork,
        IUserProvider requestUserProvider)
        : base(unitOfWork, requestUserProvider)
    {
        _unitOfWork = unitOfWork;
        _requestUserProvider = requestUserProvider;
    }

    public IActionResult Update()
    {
        //this is easy
        string userId = _requestUserProvider.GetUserId();
        //how do I do the setup in moq for this? 
        IEnumerable<UserProfileData> userProfileQuestions = _unitOfWork.UserProfileDataRepository.Find(x => x.ApplicationUserId == userId);

        if (userProfileQuestions != null)
        {
            ProfileViewModel profileViewModel = new ProfileViewModel();
            profileViewModel.UserProfileData = userProfileQuestions.FirstOrDefault();
            return View(profileViewModel);
        }

        return View("Error", "Home");
    }

РЕДАКТИРОВАТЬ 1: МОЙ IUnitOfWork и реализация метода

  public interface IUnitOfWork
{
    IRepository<ApplicationUser> ApplicationUserRepository { get; }
    IRepository<RefMedicalSpecialty> RefMedicalSpecialtyRepository { get; }
    IRepository<RefProgramDetailData> RefProgramDetailDataRepository { get; }
    IRepository<RefProgramProfileData> ProgramProfileDataRepository { get; }
    IRepository<UserProgram> UserProgramRepository { get; }
    IRepository<UserFeedback> UserFeedbackRepository { get; }
    IRepository<UserAction> UserActionRepository { get; }
    IRepository<UserProfileData> UserProfileDataRepository { get; }
    IRepository<RawCredential> RawCredentialRepository { get; }
    IRepository<RefProgramCharacteristic> RefProgramCharacteristicRepository { get; }
    IRepository<UserProgramRefProgramCharacteristic> UserProgramRefProgramCharacteristicRepository { get; }

    void Commit();
    void RejectChanges();
    void Dispose();
}

 public IRepository<UserProfileData> UserProfileDataRepository =>
      new Repository<UserProfileData>(_retContext);

1 Ответ

0 голосов
/ 23 мая 2018

Объявите метод Find как виртуальный

 public virtual YourType Find(Expression<Func<YourClass, bool>> yourfunc)

и макет как:

mockUnitOfWork.Setup(x => x.UserProfileDataRepository.Find(It.IsAny<Expression<Func<YourClass, bool>>>()).Returns(DefineYourReturn);
...