XUnit, Moq. Мок не возвращает данные

Вроде разобрался с тестированием в мире .NET. Только застрял на одном тесте, никак не пойму, почему мок не возвращает необходимый набор данных

Сам тест с моком

[Fact]
public async Task GetAllRequestWithSuccess()
{
    // Arrange
    var testUsers = GetTestModelsUser();  // список необходимого типа данных, модели
    var testCount = testUsers.Count();  // количество вхождений
    var mockService = new Mock<IUserService>();
    var mockLogger = new Mock<ILogger<UserController>>();
    mockService.Setup(service => service.ListUsers(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>(), It.IsAny<string>(), It.IsAny<bool>()))
        .ReturnsAsync((testUsers, testCount));
    var controller = new UserController(mockLogger.Object, mockService.Object);

    // Act
    var actionResult = await controller.All();
    var objectReuslt = actionResult as OkObjectResult;
}

Assert-блок пока не добавил.

Никаких ошибок при сборке и запуске нет, но actionResult имеет объект BadRequestResult. Пробежался дебагом и определил, что мок не возвращает необходимый набор данных. То есть переменные testUsers и testCount содержат данные, а вот мок при вызове ListUsers() возвращает (null, 0).

Как сделать мок рабочим?

UPD

Следуя советам с enSO попробовал собирать и передавать данные отдельно, что так же не принесло результат

[Fact]
public async Task GetAllRequestWithSuccess()
{
    // Arrange
    List<UserViewModel> testUsers = GetTestModelsUser();
    int testCount = testUsers.Count();
    (List<UserViewModel> users, int totalCount) t = (testUsers, testCount);
    var mockService = new Mock<IUserService>();
    var mockLogger = new Mock<ILogger<UserController>>();
    mockService.Setup(service => service.ListUsers(It.IsAny<string>(), It.IsAny<int>(), It.IsAny<int>(), It.IsAny<string>(), It.IsAny<bool>()))
        .ReturnsAsync(t);
    var controller = new UserController(mockLogger.Object, mockService.Object);

Ответы (1 шт):

Автор решения: Dmitry

Две вещи, которые в данном случае необходимо проверить и изменить

  1. Согласовать входные параметры с интерфейсом функции, которая вызывается в моке, то есть если функция выглядит вот так
    public Task<AnyModel, int> AnyFunc(string s, int? i = null)
    
    то вызвать в мок надо так (смотрите за входными параметрами)
    mockService.Setup(service => service.AnyFunc(It.IsAny<string>(), It.IsAny<int?>()).ReturnsAsync(tupleToReturn)
    
  2. И второе, помогло изменение поведения мока на Strict
    mockService = new Mock<IMyInterface>(MockBehavior.Strict);
    
→ Ссылка