Модуль Xamarin Forms тестирует команду - PullRequest
0 голосов
/ 25 января 2019

Я пытаюсь выполнить модульное тестирование Команды в Xamarin.Forms.

В качестве примера я привел свой класс модели представления

public class CarViewModel
{
    public Command SelectedCommand { get; } => new Command(OnSelected);

    public Car SelectedCar
    {
      get { return _selectedCar; }
      private set { _selectedCar = value; }
    }

    private void OnSelected(object obj)
    {
      if (obj is Car car) 
      {
        SelectedCar = car;
      }
    }
}

Этот класс является BindingContextна мой взгляд, SelectedCommand выше срабатывает, когда пользователь нажимает на элемент ListView, так что это метод, который привязан к Command в XAML с использованием TapGestureRecognizer подобно

<TapGestureRecognizer Command="{Binding SelectedCommand}" .../>

Iя пытаюсь выполнить модульное тестирование этого класса, поэтому мой CarViewModel класс является объектом тестирования (SUT) внутри моего теста.

Я только начал изучать насмешливые библиотеки / изолирующие фреймворки и вижу, что Moq довольно популярен.

Мои вопросы:

  1. Поскольку у меня нет никаких зависимостей в моем CarViewModel ниже, я не думаю, что мне нужно высмеивать этот класс в моем тесте.Это предмет испытания, который, на мой взгляд, не должен быть осмеянным.Только зависимости должны быть высмеяны.Это правильно?
  2. Как выполнить модульное тестирование, чтобы подтвердить, что мой SelectedCommand был вызван и что он установил свойство SelectedCar?Если я прав в 1 выше, то Moq даже не нужен для проверки этого, так как у меня нет зависимости, чтобы высмеивать мой класс CarViewModel.

1 Ответ

0 голосов
/ 25 января 2019

Исходя из текущего кода в приведенном примере, на самом деле нет нужды что-либо издеваться.

Выполните команду на SUT с известным параметром и проверьте ожидаемое поведение с помощью SelectedCar.

[Test]
public void SelectedCommand_Should_Set_SelectedCar {
    // Arrange
    var expected = new Car();
    var subject = new CarViewModel();

    // Act
    subject.SelectedCommand.Execute(expected);

    // Assert    
    var actual = subject.SelectedCar;    
    Assert.AreEqual(expected, actual);
}
...