2016-05-30 5 views
-2

Bitte schauen Sie sich meinen Code unten, die Überprüfung immer fehlgeschlagen. Jeder kann helfen?Moq Framework zu Testmethode Ausführungszeiten

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); 
} 
+1

Ihre 'filters'-Variable bleibt durchweg null, ich nehme an, das ist das Problem – HimBromBeere

+0

ich nur testen, ob die dataService.ProcessFilters Methode ausgeführt. Es ist mir egal, was die Filter wert sind. – Allen4Tech

+0

Ohne den Code dieser Methode können wir nur raten was geht. Wird durch den Code eine Ausnahme ausgelöst? Oder versagt die Assertion einfach? – HimBromBeere

Antwort

0

Nach verify-a-method-call-using-moq Sie müssen Setup das Verfahren, bevor Sie es überprüfen können:

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); 

Außerdem die ProcessFilters -Methode in Ihrem ViewModel erwartet keine Parameter. Sie haben jedoch eine filters -Eigenschaft innerhalb Ihrer Klasse, die nicht festgelegt ist (zumindest nicht in Ihrem bereitgestellten Code). Also entweder haben Sie die entsprechenden Parameter an die Methode-Signatur hinzuzufügen oder die Eigenschaft:

vm.Filters = filters; 
vm.ProcessFilters(); 
0

Beachten Sie, dass die ProcessFilters Methode zum ViewModel Klasse gehören, akzeptieren keine Argumente, so dass Sie nicht wirklich die Methode aufrufen. Wenn Sie versuchen, ob die ProcessFilters Methode zu testen, die zu der ViewModel Klasse die verspottete IMyDataService genau einmal mit einem filters Argument aufruft, die null ist, dann versuchen Sie so etwas wie:

[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()); 
} 
+0

Soweit ich sehe ist das genau das, was OP schon macht, macht keinen Unterschied, wenn er 'null' direkt oder über eine Variable (' filters') liefert. – HimBromBeere

Verwandte Themen