代码之家  ›  专栏  ›  技术社区  ›  pixel

Xamarin窗体单元测试命令

  •  1
  • pixel  · 技术社区  · 6 年前

    我正在尝试在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}" .../>
    

    我正在尝试单元测试这门课,所以我的 CarViewModel 在我的测试中,课程是测试中的主题(SUT)。

    我刚开始研究模拟库/隔离框架,我发现moq非常流行。

    我的问题是:

    1. 因为我在我的 CARVIEW模型 下面,我认为我不需要在我的考试中嘲笑那门课。在我看来,这是一个不应被嘲弄的测试对象。只能模拟依赖项。这是正确的吗?
    2. 如何进行单元测试以确认 选择命令 已被调用并已设置 SelectedCar 财产?如果我在上面的1中是正确的,那么甚至不需要MOQ来测试这个,因为我不依赖于嘲笑我的 CARVIEW模型 班级。
    1 回复  |  直到 6 年前
        1
  •  2
  •   Nkosi    6 年前

    基于示例中的当前代码,实际上不需要模拟任何东西。

    使用已知参数在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);
    }