我正在尝试为我拥有的WPF项目设置单元测试。我在一个名为WPFTester的项目中有一个名为MoveSelectionOutOfSelectedBox的公共方法。这是方法...
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()的第一行...
string 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
当我正常运行此方法而不是在单元测试中时,在此行上没有出现错误。有什么想法为什么我会出现此错误?
答案 0 :(得分:1)
恐怕这是因为Test类库不是Windows应用程序。因此,它不能具有GUI。顺便说一句,在单元测试中,您必须测试与外界隔离的逻辑,在我看来,实例化窗口实例对于单元测试而言不是正确的事情。 尝试从window类中提取方法并分别进行测试。
答案 1 :(得分:0)
您要尝试执行的操作通常是使用自动化测试用例(而不是单元测试)来完成的。应该使用单元测试来测试不依赖于系统的代码。
您可以移动逻辑以使用MVVM来实现它,然后可以为Viewmodel逻辑添加单元测试。