我正在尝试对我的viewmodel进行单元测试,并且我有许多命令只是创建一个新任务并调用服务方法并使用continuation获取结果并将它们绑定到viewmodel上的属性。我对单元测试很新,不知道如何测试这种情况。由于它在一个任务中运行,我的测试中的断言发生在服务调用完成之前和我可以在我的viewmodel上设置任何属性之前。这是我应该如何单元测试我的viewmodel?
public ICommand GetItems
{
if(this.Category != null)
{
Task<List<Item>> t = new Task<List<Item>>((o) =>
{
return _service.GetItems(this.Category);
}
t.ContinueWith((task) =>
{
this.Items = task.Result;
}
t.Start();
}
}
[TestMethod]
public void TestGetItems()
{
var selectedCategory = Category.NewItems;
var expected = new List<Item>(){ new Item(){ Value = "ExpectedValue" } };
var service = new Mock<IService>();
service.Setup(i => i.GetItems(selectedCategory)).Returns(expected);
var sut = new MainViewModel(_service.Object);
sut.Category = selectedCategory;
sut.GetItems.Execute(null);
Assert.AreEqual(expected, sut.Items);
}
答案 0 :(得分:0)
我建议创建一个可以抽象出后台任务需求的异步命令。请参阅此处以获取一个示例Asynchronous WPF Commands。
如果您选择,您还可以修改OnProperyChanged函数以将属性更改发送到UI线程。
这种模式在过去对我有用,它简化了ViewModel代码。
通过这种方式,您可以像测试任何其他功能一样进行测试。