-2

Please look at my code below, the verification always failed. Anyone can help?

public class ViewModel
{
    private IMyDataService dataService = null;

    public ViewModel(IMyDataService dataService)
    {
        this.dataService = dataService;
    }

    public Dictionary<string, string> filters {get; set;}

    public void ProcessFilters()
    {
        dataService.ProcessFilters(filters);
    }
}

[TestMethod]
public void ProcessFilters_Test()
{
    var mockService = new Mock<IMyDataService>();
    ViewModel vm = new ViewModel(mockService.Object);
    Dictionary<string,string> filters = null;
    vm.ProcessFilters(filters);
    mockService.Verify(x=>x.ProcessFilters(filters), Times.Once);
}
Allen4Tech
  • 2,094
  • 3
  • 26
  • 66

2 Answers2

1

According to verify-a-method-call-using-moq you have to setup the method before you can verify it:

var mockService = new Mock<IMyDataService>();
mockService.Setup(mock => mock.ProcessFilter(null));
ViewModel vm = new ViewModel(mockService.Object);
Dictionary<string,string> filters = null;

// Act
vm.ProcessFilters(filters);

// Assert
mockService.Verify(x=>x.ProcessFilters(filters), Times.Once);

Furthermore the ProcessFilters-method in your ViewModel does not expect any parameter. However you have a filters-property within your class which is not set (at least not within your provided code). So you either have to add the appropriate parameter to the method-signature or set the property:

vm.Filters = filters;
vm.ProcessFilters();
Community
  • 1
  • 1
MakePeaceGreatAgain
  • 35,491
  • 6
  • 60
  • 111
0

Note that the ProcessFilters method belonging to the ViewModel class does not accept any arguments, so you're not actually calling the method. If you're trying to test whether or not the ProcessFilters method belonging to the ViewModel class calls the mocked IMyDataService exactly once with a filters argument that is null, then try something like:

[TestMethod]
public void ProcessFilters_Test()
{
    // Arrange.
    var mock = new Mock<IMyDataService>();
    var vm = new ViewModel(mock.Object);

    // Act.
    vm.ProcessFilters();

    // Assert.
    mock.Verify(s => s.ProcessFilters(null), Times.Once());
}
Adriano
  • 1,697
  • 24
  • 27