我在viewmodel的init中有以下代码:
public void Init(int id)
{
Task.Run(() => {
var loadedObjects = service.GetAllById(id);
InvokeOnMainThread(() => {
foreach(var objectA in loadedObjects)
{
Items.Add(objectA);
}
});
}
}
我的测试是这样的:
[Test]
public void ShouldTest()
{
//For additional Setup of MvvmCross and registering of Dispatcher
Setup();
var viewModel = new ViewModelObjects();
viewModel.Init(1);
Assert.AreEqual(1, viewModel.Items.Count);
}
当我运行测试时,在调用InvokeOnMainThread之后,assert首先运行。 我的单位有一个调度员(来自:https://github.com/MvvmCross/MvvmCross/wiki/Testing)
我知道如何测试这些物品吗?
答案 0 :(得分:1)
Task.Run
只是继续执行代码。因此,您在Items
集合中看到的内容可能不是您所期望的,因为Task.Run
中表达式主体内部的代码可能还没有完成执行。
这不是真正的MvvmCross问题。但是一般的线程问题。
我建议您改用InitAsync
,等待该方法。您的测试也可以是异步的。