C# 单元测试后台线程

C# 单元测试后台线程,c#,multithreading,unit-testing,background,C#,Multithreading,Unit Testing,Background,如何像这样测试后台线程 因为提取kinect传感器可能是一项非常耗时的任务。我创建了一个任务,调用Parallel来获取kinect传感器和mcu这两个东西。如果其中一个都完成了,UI将更改字符串,因为两个都可以先完成。这似乎真的很难测试,因为您无法创建新的kinectsensor,您可以从kinectsensor获取一个。KinectSensors,我尝试模拟延迟,以便检查字符串是否已更改 private void Initialize() { Task.Fac

如何像这样测试后台线程

因为提取kinect传感器可能是一项非常耗时的任务。我创建了一个任务,调用Parallel来获取kinect传感器和mcu这两个东西。如果其中一个都完成了,UI将更改字符串,因为两个都可以先完成。这似乎真的很难测试,因为您无法创建新的kinectsensor,您可以从kinectsensor获取一个。KinectSensors,我尝试模拟延迟,以便检查字符串是否已更改

    private void Initialize()
    {
        Task.Factory.StartNew(() =>
        {
            Parallel.Invoke(() =>
            {
                KinectSensor kinectSensor = null;

                // while haven't got the sensor, keep fetching
                while (kinectSensor == null)
                {
                    Thread.Sleep(200);
                    kinectSensor = (from sensor in KinectSensor.KinectSensors
                                    where sensor.Status == KinectStatus.Connected
                                    select sensor).FirstOrDefault();
                }

                _kinectService = new KinectService(kinectSensor);
                _kinectService.SetupKinectSensor(new EventHandler<ColorImageFrameReadyEventArgs>(ColorImageFrameReadyEventHandler),
                    new EventHandler<SkeletonFrameReadyEventArgs>(SkeletonFrameReadyEventHandler));

                DispatcherHelper.CheckBeginInvokeOnUI(() =>
                {
                    StatusDescription = "Kinect Has connected";
                });
            }, () =>
            {
                IMCU mcu = null;

                while (mcu == null)
                {
                    Thread.Sleep(200);
                    // get mcu here
                }

                _mcuService = new MCUService(mcu);

                DispatcherHelper.CheckBeginInvokeOnUI(() =>
                {
                    StatusDescription = "MCU Has connected";
                });
            });

            DispatcherHelper.CheckBeginInvokeOnUI(() =>
            {
                CameraShadowColor = "#FF66B034";
                StatusColor = "#FF66B034";
                StatusCaption = "Ready";
                StatusDescription = "Ready to go";
                ButtonString = "OK";
            });
        });
    }

通常情况下,你不会像那样进行单元测试。这就是集成测试。@500 InternalServerError谢谢你的回答。我正在尝试在这个应用程序中实现TDD。如果您不需要测试这样的代码,这意味着将不会有用于此的单元测试代码,这将针对TDD编写测试并使用测试来帮助您完成代码。或者我只是做错了TDD?