【发布时间】:2014-02-14 09:10:00
【问题描述】:
我正在尝试对我的视图模型进行单元测试,并且我有许多命令可以简单地创建一个新任务并调用一个服务方法,并使用延续获取结果并将它们绑定到视图模型上的属性。我对单元测试还很陌生,不确定如何测试这种情况。由于它在任务中运行,因此我的测试中的断言发生在服务调用完成之前以及在我可以在我的视图模型上设置任何属性之前。这是我应该如何对我的视图模型进行单元测试吗?
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);
}
【问题讨论】:
-
为什么不把命令正在做的工作拉到命令调用的同步方法中,然后测试那个方法?
-
@Shoe 是对的......这就是要走的路。
-
如果我这样做并且命令是唯一调用它的东西,那么我不只是将方法设置为私有吗?我将其公开的唯一原因是对其进行单元测试。但是,这个理由足以公开该方法吗?
标签: c# .net wpf unit-testing mvvm