0
我想單元測試我的viewmodel,並且我有許多命令,它們只是創建一個新任務並調用一個服務方法,並使用延續獲取結果並將它們綁定到屬性上視圖模型。我對單元測試相當陌生,不確定如何測試這種情況。由於它在任務中運行,我的測試中的斷言發生在服務調用完成之前,並且可以在我的viewmodel上設置任何屬性之前。這是我應該如何測試我的viewmodel?如何對產生任務的ICommand進行單元測試
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
@Shoe是對的......這是要走的路。 – Sheridan
如果我這樣做,命令是唯一調用它不會我只是將方法設置爲私人然後呢?我公開的唯一原因是單元測試。但是這個理由足以讓這種方法公開嗎? – Nighttrain5150