C# InvokeOnMain线程的Mvvmcross单元测试
我在viewmodel的init中有以下代码:C# InvokeOnMain线程的Mvvmcross单元测试,c#,multithreading,unit-testing,xamarin,mvvmcross,C#,Multithreading,Unit Testing,Xamarin,Mvvmcross,我在viewmodel的init中有以下代码: public void Init(int id) { Task.Run(() => { var loadedObjects = service.GetAllById(id); InvokeOnMainThread(() => { foreach(var objectA in loadedObjects) { Items.Add(
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之后,首先运行断言。
我的单位有一名调度员(发件人:)
知道如何测试这些项目吗?
任务。在不等待的情况下运行
,然后继续执行代码。因此,您在项
集合中看到的可能不是您所期望的,因为任务中表达式体中的代码。Run
可能尚未完成执行
这不是一个真正的MvvmCross问题。然而,这是一个普遍的线程问题
我建议您改为使用
InitAsync
,并等待该方法。您的测试也可以是异步的。您是对的,但是在等待请求时,它将在呈现其余应用程序之前“锁定”应用程序。否,它不会锁定应用程序,因为它是异步的