Как проверить этот метод асинхронного удаления? - PullRequest
0 голосов
/ 16 мая 2019

Я безуспешно пытаюсь протестировать настройку репозитория Delete метод:

    [SetUp]
    public void Setup()
    {
        var admin = new User
        {
            Id = ADMIN_USER_ID,
            Name = "admin",
            Lastname = "admin",
            Username = "admin"
        };

        var normalUser = new User
        {
            Id = USER_ID,
            Name = "user",
            Lastname = "user",
            Username = "user"
        };

        _userList.Add(admin);
        _userList.Add(normalUser);

        _userRepository.Setup(u => u.DeleteAsync(It.IsAny<string>())).Callback((string id) =>
        {
            var user = _userList.Find(p => p.Id == id);
            if (user != null)
                _userList.Remove(user);
        });

        _userRepository.Setup(u => u.AddAsync(It.IsAny<User>())).Returns((User u) =>
        {
            u.Id = Guid.NewGuid().ToString();
            _userList.Add(u);
            return Task.CompletedTask;
        });
    }

    [Test]
    public void Should_Delete_Normal_User()
    {
        var service = GetService();

        service.DeleteUser(USER_ID); // Here should run Synchronously using .Wait()

        Assert.ThrowsAsync<UserNotFoundException>(() => service.GetUser(USER_ID));
    }

Этот метод проходит успешно, но если я поставлю .Wait() после service.DeleteUser(USER_ID), тест не выполняется.Не проходит, потому что он генерирует неожиданное исключение NullException.

Методы service и repository имеют значение async и возвращают только пустой Task объект.

1 Ответ

2 голосов
/ 16 мая 2019

Похоже, DeleteAsync -mock должен быть похож на AddAsync -mock и возвращать Task :

  _userRepository
    .Setup(u => u.DeleteAsync(It.IsAny<string>()))
    .Returns((string id) =>
      {
          var user = _userList.Find(p => p.Id == id);
          if (user != null)
              _userList.Remove(user);

          return Task.CompletedTask;
      });  

Тест можетбыть асинхронным :

  [Test]
  public async Task Should_Delete_Normal_User()
  {
      var service = GetService();

      await service.DeleteUser(USER_ID);

      Assert.ThrowsAsync<UserNotFoundException>(() => service.GetUser(USER_ID));
  }
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...