Автоматизированное тестирование OpenXML SDK

Я реализую создание документов MS Word с использованием элементов управления содержимым и OpenXML SDK. Я хотел бы провести автоматическое тестирование этого кода (модульные тесты или несколько простых тестов автоматизации пользовательского интерфейса).

Есть ли у кого-нибудь опыт тестирования генерации документов MS Word? Какие возможны варианты?

Заранее спасибо!


person Andrii    schedule 28.07.2010    source источник
comment
Почему модульное тестирование OpenXML должно отличаться от стандартного. Вы пытаетесь проверить, можно ли открыть документ в Word или все будет хорошо?   -  person Ingó Vals    schedule 12.08.2010
comment
Ничего особенного, просто технически сложно. Типичный тест - это Arrange-Act-Assert. Итак, вопрос в том, как мы можем легко выполнить последнюю часть - Assert. Возможно, с помощью какой-то автоматизации слов или фреймворка автоматизации пользовательского интерфейса, но я не вижу простого способа сделать это. Таким образом, я заканчиваю тестами, генерирующими отчет и открывающимися в словах, поэтому я вручную проверяю, в порядке ли отчет. Это не чистый модульный тест, но он лучше, чем запуск полного приложения для создания необходимых отчетов. Также я заинтересован в тестировании кода, который работает напрямую с Open XML, а все остальные части я выделил и протестировал с помощью обычных модульных тестов.   -  person Andrii    schedule 12.08.2010


Ответы (4)


Нет, я не проводил модульное тестирование генерации документов MS Word, но, как говорит Инго Валс, он не должен отличаться от любой другой формы модульного тестирования.

1) [Необязательно - чтобы убедиться, что вы понимаете, как правильно использовать SDK для ваших нужд]. Подумайте, как ваше приложение должно управлять SDK. Напишите несколько тестовых сценариев, имитирующих предполагаемую функциональность, и убедитесь, что создаваемые ими документы Word соответствуют вашим ожиданиям.

2) Создайте интерфейс (или интерфейсы), содержащий методы, соответствующие функциональности, необходимой вам для создания документации. Примечание: интерфейс не обязательно должен предлагать полную функциональность OpenXML SDK - только функциональность, которая вам нужна для вашего приложения.

3) Создайте конкретную реализацию вашего интерфейса, которая перенаправляет вызовы OpenXML SDK.

4) Используйте интерфейс, который вы создали в своем приложении, для создания документа.

5) Используйте NUnit и NMock (или аналогичные) для написания модульных тестов, управляющих уровнем генерации вашего приложения. Эти тесты должны использовать имитацию интерфейса, а не экземпляр конкретной реализации. Теперь вы можете утверждать в своих тестах, что уровень вашего поколения ведет себя так, как вы ожидаете.

person Seb Rose    schedule 12.08.2010
comment
Спасибо за ответ, но дело в том, что я заинтересован в тестировании кода, который напрямую управляет Open XML SDK. Все остальное могу отделить или поиздеваться, это понятно. Мне не нравится использование макетов вместо фактического вызова Open XML SDK, поскольку я хочу проверить, что мой код отлично работает с SDK. Кто-то может возразить, что это не чистый модульный тест, а то, чего действительно не хватает в моем текущем тесте. - person Andrii; 12.08.2010
comment
Я описал модульное тестирование вашего кода. Я бы назвал то, что вы хотите, интеграционным тестом. В этом случае, я думаю, вы могли бы заставить SDK выводить Word XML и написать метод, который сравнивает полученную DOM с ожидаемой DOM. - person Seb Rose; 13.08.2010
comment
Да, модуль или интеграция, или автоматизация пользовательского интерфейса, или что подойдет. Подведем итоги любого типа автоматизированного тестирования, позволяющего проводить верификацию (часть теста Assert). Проверим сравнение DOM. Большое спасибо! - person Andrii; 13.08.2010
comment
Я согласен с Себом Россом здесь. Создайте документ или часть документа, которую вы ожидаете выпустить (со всеми прибамбасами, чтобы убедиться, что вы все протестируете), и сравните ее с тем, что вы создаете в тесте. - person Ingó Vals; 16.08.2010

На самом деле я делаю нечто подобное с OpenXML SDK для электронных таблиц, и на самом деле я просто пишу код OpenXML api, который открывает файл из потока с целью тестирования. Модульные тесты на самом деле не говорят вам достаточно, поскольку вам нужно знать, является ли это допустимым файлом.

// There should be a sheet for every team
[TestMethod]
[HostType("Moles")]
public void CaseExportTeamSheetsTest()
{
    IRepository<ServiceTbl, ServiceTbl> ServiceRepository;
    CaseController target;
    BuildCaseControllerMoledCases(out ServiceRepository, out target);
    FileStreamResult actual = target.Export();   using (SpreadsheetDocument spreadsheetDocument = SpreadsheetDocument.Open(actual.FileStream, false))
    {
        var services = ServiceRepository.All;

        foreach (var item in services)
        {
            // get a worksheet foreach service
            var sheets = spreadsheetDocument.WorkbookPart.Workbook.Descendants<Sheet>().Where(s => s.Name == item.ServiceName);
            Assert.IsTrue(sheets.Count() > 0);
        }
    }

    actual.FileStream.Close();
    actual.FileStream.Dispose();
}
person Idaho Edokpayi    schedule 06.04.2011

Предупреждение относительно OpenXml Sdk 2.0 и действующего кода ....

Я создал документы OpenXml Powerpoints, которые проверяются с помощью инструментов XML SDK 2.0 и работают в Office 2007 на моем компьютере, но при открытии документа на другом компьютере с помощью Office Powerpoint 2007 он жалуется и говорит, что формат недействителен

XML Sdk 2.0 http://www.microsoft.com/downloads/details.aspx?FamilyId=C6E744E5-36E9-45F5-8D8C-331DF206E0D0&displaylang=en

person salgo60    schedule 24.08.2010

Высокоуровневый подход к тестированию генерации документов Microsoft Word следующий:

  1. Определите тестовые примеры, каждый из которых состоит из:

    • the generator inputs, i.e., the data to be used in generating Word documents; and
    • ожидаемый результат в формате Open XML, то есть разметка Open XML, представляющая правильно сгенерированный документ Word.
  2. Напишите методы тестирования, используя вашу любимую среду модульного тестирования (например, xUnit). Используя типичный шаблон «Упорядочить, Действовать, Утвердить», эти методы тестирования:

    • set up the generator, generator inputs, and expected generator outputs as required;
    • запустить генератор, предоставив входы генератора и зафиксировав фактические выходы генератора; и
    • сравните фактические выходы генератора с ожидаемыми выходами генератора.

Получить фактический выходной сигнал генератора очень легко с помощью Open XML SDK. При сравнении фактических и ожидаемых результатов вы можете применять разные уровни фильтрации или упрощения разметки. Например, вы можете сосредоточиться на важной разметке, такой как элементы управления содержимым (w:sdt элементов), упомянутые в вопросе.

person Thomas Barnekow    schedule 16.11.2019