C# WPF项目-无法设置单元测试(C)

C# WPF项目-无法设置单元测试(C),c#,wpf,unit-testing,C#,Wpf,Unit Testing,我正在尝试为一个WPF项目设置单元测试。在一个名为WPFTester的项目中,我有一个名为MoveSelectionAutoFSelectedBox的公共方法。这里是方法 public void MoveSelectionOutOfSelectedBox(object sender, RoutedEventArgs e) { if (testSelectedBox.Items.Count == 1 && testSelectedBox.Selected

我正在尝试为一个WPF项目设置单元测试。在一个名为WPFTester的项目中,我有一个名为MoveSelectionAutoFSelectedBox的公共方法。这里是方法

  public void MoveSelectionOutOfSelectedBox(object sender, RoutedEventArgs e)
    {
        if (testSelectedBox.Items.Count == 1 && testSelectedBox.SelectedItem == null)
        {
            testSelectedBox.Items.Clear();
            testSelectedBox2.Items.Clear();
            spOptionsAcceptableRangeMax.Visibility = spOptionsAcceptableRangeMin.Visibility = spOptionsLabel.Visibility = spOptionsValue.Visibility = Visibility.Hidden;
            xmlData2.Clear();
        }
        else
        {
            xmlData2.RemoveAt(testSelectedBox.SelectedIndex);
            testSelectedBox.Items.RemoveAt(testSelectedBox.SelectedIndex);

            if (testSelectedBox.Items.Count == 0)
            {
                spOptionsAcceptableRangeMax.Visibility = spOptionsAcceptableRangeMin.Visibility = spOptionsLabel.Visibility = spOptionsValue.Visibility = Visibility.Hidden;
                xmlData2.Clear();
            }
            else
            {
                LoadOptionsForCertainIndex(0);
            }
        }
        UpdateTestEstimate();
    }
然后,我在同一个解决方案中设置了一个单独的项目,称为ORCTests。在ORCTests中名为UnitTest1.cs的类中,我有以下测试

using System;
using Microsoft.VisualStudio.TestTools.UnitTesting;
using WpfTester;

using System.Collections.Generic;
using System.Collections.ObjectModel;
using System.ComponentModel;
using System.Text;
using System.Windows;
using System.Windows.Controls;
using System.Reflection;
using System.Windows.Media.Imaging;
using System.Xml;


namespace ORCTests          
{
    [TestClass]
    public class UnitTest1 
    {
        [TestMethod]
        public void TestMethod1()
        {
            var wpf = new MainWindow();            
            wpf.LoadDeviceBox();
            Assert.IsTrue(WpfTester.MainWindow.xmlData.Count > 0);
        }
    }
}
当我调试这个程序时,我会进入MainWindow(),但在MainWindow的第一行上会出现一个错误,它只是设置了动态路径。这是MainWindow()的第一行

字符串binaryDocumentPath=System.IO.Path.GetDirectoryName(System.Reflection.Assembly.GetEntryAssembly().Location)+“/Documents/”

在调试模式下,我在这一行遇到以下错误

System.NullReferenceException
  HResult=0x80004003
  Message=Object reference not set to an instance of an object.
  Source=WpfTester
  StackTrace:
   at WpfTester.MainWindow..ctor() in C:\Users\StarkS02\source\repos\WpfTester\WpfTester\MainWindow.xaml.cs:line 26
   at ORCTests.UnitTest1.TestMethod1() in C:\Users\StarkS02\source\repos\WpfTester\ORCTests\UnitTest1.cs:line 24

当我正常运行这个方法时,而不是在单元测试中,我不会在这一行中得到错误。知道我为什么会出现这个错误吗?

恐怕这是因为测试类库不是windows应用程序。因此,它不能有GUI。顺便说一句,在单元测试中,您必须测试与外部世界隔离的逻辑,在我看来,实例化窗口实例对于单元测试是不正确的。
尝试从window类中提取方法并单独测试。

通常使用自动测试用例(而不是单元测试)来完成。单元测试应用于测试不依赖于系统的代码

您可以移动逻辑以使用MVVM实现它,然后可以为Viewmodel逻辑添加单元测试