Мой тестовый пример не выполняется, он начинает выполняться, но ничего не происходит, и он показывает, что состояние не выполнено - PullRequest
1 голос
/ 03 марта 2020

Мой тестовый пример не выполняется, он начинает выполняться, но ничего не происходит, и он показывает не запущенное состояние. Что я сделал, это:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Excel = Microsoft.Office.Interop.Excel;
using Xceed.Wpf.Toolkit;
using System;
using System.Collections.Generic;

namespace Test01.AppObj
{
    [TestClass]
    public class MainProjectFile
    {

        bool control = true;

        [TestInitialize]
        //[Ignore]
        [Priority(1)]
        [TestMethod]

        public void Exceldownload(List<string> lst)
        {
            string str;
            int rw = 0;
            int cl = 0;


            Excel.Application xlApp = new Excel.Application();
            {
                xlApp.Visible = true;
                xlApp.DisplayAlerts = false;
            }

            Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"path", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "", false, false, 0, true, false, false);
            xlApp.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMaximized;

            Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];

            Excel.Range xlRange = xlWorksheet.UsedRange;
            rw = xlRange.Rows.Count;
            cl = xlRange.Columns.Count;

            for (int i = 1; i <= cl; i++)
            {
                str = Convert.ToString((xlRange.Cells[2, i] as Excel.Range).Value2);
                if (!lst[i - 1].Equals(str))
                {
                    MessageBox.Show($"Not match in column: {i}");
                    control = false;
                }
            }
            if (control)
            {
                MessageBox.Show($"All match");
            }

            xlWorkbook.Close(0);
            xlApp.Quit();
        }
        private void Button1_Click(object sender, EventArgs e)
        {
            List<string> lst1 = new List<string>() { "Abc", "10t", "88990" };
            Exceldownload(lst1);
        }
    }
}

Но когда я нажимаю на запустить тест, файл Excel делает не открыт и тестовый прогон показывает Not Run. Я не понимаю, в чем проблема, так как ошибка не отображается. Пожалуйста, ведите меня.

Ответы [ 2 ]

2 голосов
/ 03 марта 2020

Должно быть так:

using Microsoft.VisualStudio.TestTools.UnitTesting;
using Excel = Microsoft.Office.Interop.Excel;
using Xceed.Wpf.Toolkit;
using System;
using System.Collections.Generic;
using System.Diagnostics;

namespace Test01.AppObj
{

[TestClass]
public class MainProjectFile
{

bool control = true;
private bool show_messages = true;

[TestMethod]
public void TestExcel_RunExceldownload_OK()
{
  //Arrange
  List<string> lst1 = new List<string>() { "Abc", "10t", "88990" };
  show_messages = false;

  //Act
  bool returnValue = Exceldownload(lst1);

  //Assert
  Debug.Assert(returnValue==true);
}


private bool Exceldownload(List<string> lst)
{
  string str;
  int rw = 0;
  int cl = 0;
  bool returnValue = false;

  Excel.Application xlApp = new Excel.Application();
  {
    xlApp.Visible = true;
    xlApp.DisplayAlerts = false;
  }

  Excel.Workbook xlWorkbook = xlApp.Workbooks.Open(@"path", 0, true, 5, "", "", true, Excel.XlPlatform.xlWindows, "", false, false, 0, true, false, false);
  xlApp.WindowState = Microsoft.Office.Interop.Excel.XlWindowState.xlMaximized;

  Excel._Worksheet xlWorksheet = xlWorkbook.Sheets[1];

  Excel.Range xlRange = xlWorksheet.UsedRange;
  rw = xlRange.Rows.Count;
  cl = xlRange.Columns.Count;

  for (int i = 1; i <= cl; i++)
  {
    str = Convert.ToString((xlRange.Cells[2, i] as Excel.Range).Value2);
    if (!lst[i - 1].Equals(str))
    { 
      if (show_messages)
        MessageBox.Show($"Not match in column: {i}");
      control = false;
      returnValue = false;
    }
  }
  if (control)
  {
    returnValue = true;
    if (show_messages)
      MessageBox.Show($"All match");
  }

  xlWorkbook.Close(0);
  xlApp.Quit();
  return returnValue;
}

private void Button1_Click(object sender, EventArgs e)
{
  List<string> lst1 = new List<string>() { "Abc", "10t", "88990" };
  Exceldownload(lst1);
}
}
}

Я добавил:

private bool show_messages = true; 

, затем создал новый метод тестирования:

[TestMethod] 
public void TestExcel_RunExceldownload_OK() 

некоторые незначительные изменения в

private bool Exceldownload(List<string> lst) 

чтобы не показывать окна сообщений при тестировании метода. Я изменил void на bool, чтобы сделать Assert.

В общем, если вы хотите, чтобы тесты работали, вы должны написать метод тестирования publi c и добавить соответствующий атрибут: [TestMethod]. Кроме того, чтобы написать хорошие тесты, попробуйте использовать шаблон Arrange-Act-Assert, см., Например: https://github.com/testdouble/contributing-tests/wiki/Arrange-Act-Assert

0 голосов
/ 03 марта 2020

Здесь есть пара вещей. Прежде всего проверьте модульное тестирование требований TestMethod в официальной документации

Метод испытаний должен соответствовать следующим требованиям:

  • Элемент списка

  • Он украшен атрибутом [TestMethod].

  • Возвращает пустоту.

У него не может быть параметров.

Это означает, что вы должны изменить код, как упоминает @Marcin.

        [TestInitialize]
        //[Ignore]
        [Priority(1)]
        [TestMethod]

        public void ExceldownloadTest()
        {
            // Init list 
            this.Exceldownload(lst);
        }

         public void Exceldownload()
        {
            // Your code.
        }

Второе, что я вижу, это то, что ваш код ломается, и поэтому Вы получаете аргумент вне диапазона. Ваша проблема здесь:

  for (int i = 1; i <= cl; i++)
  {
    str = Convert.ToString((xlRange.Cells[2, i] as Excel.Range).Value2);
    if (!lst[i - 1].Equals(str)) // Problematic row

Теперь, когда ваш тест выполняется, i намного больше, чем 3, что было первоначальной длиной.

Попробуйте изменить с помощью

if (lst.Count > i-2 && !lst[i - 1].Equals(str)) // Problematic row
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...