Проект WPF - не удалось настроить модульное тестирование (C #) - PullRequest
0 голосов
/ 05 июля 2018

Я пытаюсь настроить модульные тесты для моего проекта WPF. У меня есть открытый метод с именем MoveSelectionOutOfSelectedBox в проекте под названием WPFTester. Вот метод ...

  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

Когда я запускаю этот метод нормально, а не в модульном тесте, я не получаю сообщение об ошибке в этой строке. Есть идеи, почему я получаю эту ошибку?

Ответы [ 2 ]

0 голосов
/ 06 июля 2018

То, что вы пытаетесь сделать, обычно выполняется с использованием автоматических тестовых случаев (не юнит-тестов). Модульные тесты должны использоваться для тестирования кода, который не зависит от системы

Вы можете переместить свою логику для ее реализации с помощью MVVM, а затем добавить модульный тест для логики Viewmodel.

0 голосов
/ 05 июля 2018

Боюсь, это потому, что библиотека классов Test не является приложением Windows. Поэтому он не может иметь графический интерфейс. Между прочим, в модульных тестах вы должны тестировать свою логику изолированно от внешнего мира, и, на мой взгляд, создание экземпляров окон не является правильным решением для модульных тестов. Попробуйте извлечь ваш метод из класса окна и протестировать его отдельно.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...