用于测试方法执行时间的 Moq 框架
Moq framework to test method execute times
请看我下面的代码,验证总是失败。有人可以帮忙吗?
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);
}
请注意,属于 ViewModel
class 的 ProcessFilters
方法不接受任何参数,因此您实际上并未调用该方法。如果您正在尝试测试属于 ViewModel
class 的 ProcessFilters
方法是否使用 filters
参数调用模拟的 IMyDataService
恰好一次null
,然后尝试类似的操作:
[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());
}
根据verify-a-method-call-using-moq,您必须先设置方法才能验证它:
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);
此外,ViewModel
中的 ProcessFilters
方法不需要任何参数。但是,您的 class 中有一个 filters
-属性 未设置(至少不在您提供的代码中)。因此,您要么必须向方法签名添加适当的参数,要么设置 属性:
vm.Filters = filters;
vm.ProcessFilters();
请看我下面的代码,验证总是失败。有人可以帮忙吗?
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);
}
请注意,属于 ViewModel
class 的 ProcessFilters
方法不接受任何参数,因此您实际上并未调用该方法。如果您正在尝试测试属于 ViewModel
class 的 ProcessFilters
方法是否使用 filters
参数调用模拟的 IMyDataService
恰好一次null
,然后尝试类似的操作:
[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());
}
根据verify-a-method-call-using-moq,您必须先设置方法才能验证它:
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);
此外,ViewModel
中的 ProcessFilters
方法不需要任何参数。但是,您的 class 中有一个 filters
-属性 未设置(至少不在您提供的代码中)。因此,您要么必须向方法签名添加适当的参数,要么设置 属性:
vm.Filters = filters;
vm.ProcessFilters();