Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/multithreading/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# InvokeOnMain线程的Mvvmcross单元测试_C#_Multithreading_Unit Testing_Xamarin_Mvvmcross - Fatal编程技术网

C# InvokeOnMain线程的Mvvmcross单元测试

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(

我在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之后,首先运行断言。 我的单位有一名调度员(发件人:)

  • 运行Task.Run的原因是需要呈现GUI的其余部分
  • InvokeOnMainThread触发PropertyChanged
  • 像()这样的尝试不起作用

  • 知道如何测试这些项目吗?

    任务。在不等待的情况下运行
    ,然后继续执行代码。因此,您在
    集合中看到的可能不是您所期望的,因为
    任务中表达式体中的代码。Run
    可能尚未完成执行

    这不是一个真正的MvvmCross问题。然而,这是一个普遍的线程问题


    我建议您改为使用
    InitAsync
    ,并等待该方法。您的测试也可以是异步的。

    您是对的,但是在等待请求时,它将在呈现其余应用程序之前“锁定”应用程序。否,它不会锁定应用程序,因为它是
    异步的