blob: 5782739fcd291a74c9ff6da038145bc42183cbf8 [file] [log] [blame]
//
// Licensed to the Apache Software Foundation (ASF) under one
// or more contributor license agreements. See the NOTICE file
// distributed with this work for additional information
// regarding copyright ownership. The ASF licenses this file
// to you under the Apache License, Version 2.0 (the
// "License"); you may not use this file except in compliance
// with the License. You may obtain a copy of the License at
//
// http://www.apache.org/licenses/LICENSE-2.0
//
// Unless required by applicable law or agreed to in writing,
// software distributed under the License is distributed on an
// "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
// KIND, either express or implied. See the License for the
// specific language governing permissions and limitations
// under the License.
//
= Добавление модульных тестов в проект C - Практическое руководство по IDE NetBeans
:jbake-type: tutorial
:jbake-tags: tutorials
:jbake-status: published
:icons: font
:syntax: true
:source-highlighter: pygments
:toc: left
:toc-title:
:description: Добавление модульных тестов в проект C - Практическое руководство по IDE NetBeans - Apache NetBeans
:keywords: Apache NetBeans, Tutorials, Добавление модульных тестов в проект C - Практическое руководство по IDE NetBeans
_Составитель: link:mailto:susanm@netbeans.org[+_Сьюзан Морган (Susan Morgan)_+]
Март 2014 г._ [Номер версии: V8.0-1]
== Требования
*Для работы с этим учебным курсом требуется программное обеспечение, указанное ниже.*
|===
|Программное обеспечение |Требуемая версия
|IDE NetBeans (включая поддержку C/C++/Fortran) |link:https://netbeans.org/downloads/index.html[+версия 7.4 или 8.0 с подключаемым модулем NetBeans C/C+++]
|Комплект для разработчика на языке Java (JDK) |link:http://www.oracle.com/technetwork/java/javase/downloads/index.html[+Версия 7 или 8+]
|Инфраструктура тестирования CUnit 2.1 |link:http://sourceforge.net/projects/cunit/[+Инфраструктура модульного тестирования для проектов C на sourceforge.+]
|===
Дополнительные сведения о загрузке и установке необходимого программного обеспечения NetBeans см. в разделах link:../../../community/releases/80/install.html[+Инструкции по установке IDE NetBeans+] и link:../../../community/releases/80/cpp-setup-instructions.html[+Настройка IDE NetBeans для C/C++/Fortran+]
.
== Введение
IDE NetBeans c подключаемым модулем C/C++/Fortran поддерживает модульное тестирование в проектах C/C++. В среде IDE можно создавать и выполнять тесты C и C++, осуществлять их отладку и просматривать результаты. В этой статье описывается использование модульных тестов в проектах C/C++ в среде IDE.
При создании управляемого проекта создается логическая папка 'Файлы тестов' для работы с модульными тестами проекта. Тесты можно создавать непосредственно в этой папке 'Файлы тестов' или группировать их во вложенные логические папки. Узел теста в папке 'Файлы тестов' представляет собой специальную папку для выполнения действий, связанных с тестом. При сборке теста основной файл будет исключен из проекта. В противном случае будут использоваться все остальные параметры проекта.
IDE поддерживает только форматы CUnit, CppUnit и свой собственный "простой" формат выходных данных. Это означает, что результаты тестов представляют собой выходные данные в одном из указанных форматов. В среде IDE предусмотрены шаблоны модульных тестов:
* Простой тест C
* Простой тест C++
* Тест CUnit
* Тест CppUnit
* Средство запуска теста CppUnit
В этом руководстве описывается использование инфраструктуры тестирования CUnit и простых тестов C в среде NetBeans на Ubuntu Linux, но приведенные здесь инструкции применимы и к другим типам тестов на других плафтормах. Инфраструктуры тестирования CUnit и CppUnit в этом руководстве не рассматриваются. Информацию об использовании этих инфраструктур можно найти в соответствующей документации.
== Установка инфраструктуры тестирования CUnit
Чтобы выполнить практические задания, представленные в этом руководстве, необходимо сначала установить CUnit на локальном компьютере. Дополнительные сведения об инфраструктуре CUnit см. в разделе link:http://sourceforge.net/projects/cunit/[+Проект инфраструктуры тестирования C Unit на sourceforge.+]
Документация по CUnit включена в загружаемый пакет CUnit. Также с документацией можно ознакомиться на веб-сайте по адресу link:http://cunit.sourceforge.net/doc/index.html[+http://cunit.sourceforge.net/doc/index.html+].
Следуйте инструкциям по установке для вашей платформы:
* <<linux,Установка CUnit на Linux или Mac OS>>
* <<solaris,Установка CUnit на Oracle Solaris 11>>
* <<mingw,Установка CUnit на Windows и MinGW>>
* <<cygwin,Установка CUnit на Windows и Cygwin>>
=== Установка CUnit на Linux или Mac OS
При установке на платформу Linux должна быть возможность установить пакеты libcunitl, libcunitl-doc и libcunitl-dev из репозитория пакетов.
Если пакеты libcunitl* недоступны на Mac OS или Linux, можно загрузить исходный код CUnit и выполнить сборку в соответствии с инструкциями в данном документе.
Приведенные ниже инструкции подразумевают, что вы загрузили файл CUnit-2.1-2-src.tar.bz2 в каталог /tmp. Если загруженный файл имеет другое имя, обязательно укажите фактическое имя загружаемого файла CUnit и фактический каталог, в который был сохранен этот файл.
1. Загрузите исходный код CUnit-2.1-2-src.tar.bz2 со страницы link:http://sourceforge.net/projects/cunit/files[+Файлы CUnit+] и сохраните его в каталог временных файлов, например /tmp.
2. В окне терминала распакуйте файл ``CUnit-2.1-2-src.tar.bz2`` следующим образом:
[source,shell]
----
$ cd /tmp
$ bunzip2 CUnit-2.1-2-src.tar.bz2
$ tar -xvf CUnit-2.1-2-src.tar
----
[start=3]
. Создайте конфигурацию, выполните сборку и установку CUnit из каталога /tmp следующим образом:
[source,shell]
----
$ cd CUnit-2.1-2
$ ./configure --prefix=/usr
$ make
$ sudo make install
----
После выполнения команды 'make install' инфраструктура тестирования CUnit готова к использованию в среде IDE. Мoжно переходить к разделу <<project,Создание проекта>>.
[[solaris]]
=== Установка CUnit на Oracle Solaris
Перед использованием тестов CUnit необходимо выполнить сборку CUnit в системе сборки link:http://en.wikipedia.org/wiki/GNU_build_system[+GNU+]. Система сборки GNU в Oracle Solaris 11, как правило, не установлена по умолчанию. Компоненты системы сборки GNU можно получить из репозитория пакетов Oracle Solaris 11 с помощью следующих команд:
[source,java]
----
pkg install pkg://solaris/developer/build/gnu-make
pkg install pkg://solaris/developer/build/make
pkg install pkg://solaris/developer/gcc-45
pkg install pkg://solaris/system/header
pkg install pkg://solaris/developer/build/autoconf
pkg install pkg://solaris/developer/build/automake-110
----
Приведенные ниже инструкции подразумевают, что вы загрузили файл CUnit-2.1-2-src.tar.bz2 в каталог /tmp. Если загруженный файл имеет другое имя, обязательно укажите фактическое имя загружаемого файла CUnit и фактический каталог, в который был сохранен этот файл.
1. Загрузите исходный код CUnit-2.1-2-src.tar.bz2 со страницы link:http://sourceforge.net/projects/cunit/files[+Файлы CUnit+] и сохраните его в каталог временных файлов, например /tmp.
2. В окне терминала распакуйте файл ``CUnit-2.1-2-src.tar.bz2`` следующим образом:
[source,shell]
----
$ cd /tmp
$ bunzip2 CUnit-2.1-2-src.tar.bz2
$ tar -xvf CUnit-2.1-2-src.tar
----
[start=3]
. Создайте конфигурацию, выполните сборку и установку CUnit из каталога /tmp следующим образом:
[source,shell]
----
$ cd CUnit-2.1-2
$ ./configure --prefix=/usr
$ make
$ make install
----
После выполнения команды 'make install' инфраструктура тестирования CUnit готова к использованию в среде IDE. Мoжно переходить к разделу <<project,Создание проекта>>.
=== Установка CUnit на Windows и MinGW
Приведенные ниже инструкции подразумевают, что вы загрузили файл CUnit-2.1-2-src.tar.bz2 в каталог C:/distr. Если загруженный файл имеет другое имя, обязательно укажите фактическое имя загружаемого файла CUnit и фактический каталог, в который был сохранен этот файл.
1. Загрузите исходный код CUnit-2.1-2-src.tar.bz2 со страницы link:http://sourceforge.net/projects/cunit/files[+Файлы CUnit+] и сохраните его в каталог временных файлов, например C:/distr.
2. Запустите оболочку MinGW в Windows (выберите Пуск > Все программы > MinGW > MinGW Shell).
3. В окне MinGW Shell распакуйте файл ``CUnit-2.1-2-src.tar.bz2`` следующим образом:
[source,shell]
----
$ cd c:/distr
$ bunzip2.exe CUnit-2.1-2-src.tar.bz2
$ tar xvf CUnit-2.1-2-src.tar
$ cd ./CUnit-2.1-2
----
[start=4]
. Найдите путь Unix к MinGW с помощью команды mount.
[source,shell]
----
$ mount
----
Результат будет выглядеть примерно так:
[source,java]
----
C:\Users\username\AppData\Local\Temp on /tmp type user (binmode,noumount)
C:\MinGW\msys\1.0 on /usr type user (binmode,noumount)
C:\MinGW\msys\1.0 on / type user (binmode,noumount)
*C:\MinGW on /mingw type user (binmode)*
----
В последней строке, выделенной полужирным шрифтом, показан путь Unix: /mingw. Система может выдать и другой результат. Запишите этот путь, так как его потребуется указать в следующей команде.
[start=5]
. Создайте конфигурацию Makefile с помощью следующей команды.
Если оболочка MinGW расположена на пути, отличном от /mingw, обязательно укажите соответствующее местосположение MinGW в Unix с помощью параметра --prefix=.
[source,shell]
----
$ ./configure --prefix=/mingw
_(lots of output about checking and configuring)
..._
config.status: executing depfiles commands
config.status: executing libtool commands
----
[start=6]
. Выполните сборку библиотеки для CUnit:
[source,shell]
----
$ make
make all-recursive
make[1]: Entering directory 'c/distr/CUnit-2.1-2'
Making all in CUnit
...
_(lots of other output)_
make[1]: Leaving directory 'c/distr/CUnit-2.1-2'
$
----
[start=7]
. Установите библиотеку CUnit в каталоги C:/MinGW/include/CUnit, C:/MinGW/share/CUnit и C:/MinGW/doc/CUnit с помощью команды make install:
[source,shell]
----
$ make install
Making install in CUnit
make[1]: Entering directory 'c/distr/CUnit-2.1-2/CUnit'
Making install in Sources
make[1]: Entering directory 'c/distr/CUnit-2.1-2/Cunit/Sources'
...
_(lots of other output)_
make[1]: Leaving directory 'c/distr/CUnit-2.1-2'
$
----
[start=8]
. Если вы используете версию Java 7 Update 21, 25 или 40, необходимо применить временное решение link:https://netbeans.org/bugzilla/show_bug.cgi?id=236867[+проблемы 236867+], чтобы использовать CUnit для выполнения заданий этого практического руководства.
1. Перейдите в раздел Сервис > Параметры > C/C++ > Средства сборки и выберите набор средств MinGW.
2. Измените запись комынды make на make.exe без указания полного пути.
3. Выйдите из среды IDE.
4. В Windows 7 или более поздних версиях введите *var* в поле поиска в меню 'Пуск' для быстрого поиска ссылки 'Изменит системные переменные среды'.
5. Перейдите на вкладку 'Дополнительно' и щелкните 'Переменные среды'.
6. На панели 'Системные переменные' в диалоговом окне 'Переменные среды' нажмите 'Создать'.
7. В поле 'Имя переменной' введите MAKE, а в поле 'Значение переменной' - make.exe.
8. Нажмите кнопку OK в каждом диалоговом окне, чтобы сохранить изменения.
9. Запустите IDE и перейдите к следующему разделу.
После выполнения команды make install инфраструктура CUnit готова к использованию в среде IDE. Мoжно переходить к разделу <<project,Создание проекта>>.
=== Установка CUnit на Windows и Cygwin
В Cygwin для установки CUnit можно использовать стандартный установщик Cygwin, setup-x86.exe или setup-x86_64.exe, который можно загрузить на веб-сайте http://cygwin.com/install.html. Пакет CUnit находится в категории 'Библиотеки', и его можно установить точно так же, как и другие пакеты.
Проверьте правильность используемой версии. Если вы работаете в 64-разрядной версии IDE NetBeans, необходимо использовать 64-разрядную версию Cygwin и CUnit.
Если среда Cygwin еще не установлена, воспользуйтесь общими инструкциями по установке Cygwin в разделе link:../../../community/releases/80/cpp-setup-instructions.html#cygwin[+ Настройка NetBeans IDE для C/C++/Fortran+]. Чтобы установить CUnit, можно выбрать соответствующий файл в категории 'Библиотеки' в программе установки.
== Создание проекта для учебного курса
Чтобы изучить компоненты модульных тестов, необходимо сначала создать новое приложение C:
1. Выберите команду "Файл" > "Новый проект".
2. В мастере создания проектов выберите 'C/C++', а затем 'Приложение C/C++'.
3. В диалоговом окне 'Создание приложения C/C++' выберите 'Создать основной файл', затем выберите язык C. Оставьте все остальные настройки по умолчанию без изменения.
image::images/c-unit-new-project.png[]
[start=4]
. Нажмите 'Готово'. В результате будет создан проект Cpp_Application__x_.
[start=5]
. В окне 'Проекты' откройте папку 'Исходные файлы' и дважды щелкните файл `main.c`, чтобы открыть его в редакторе. Содержимое файла будет выглядеть примерно так, как показано на рисунке:
image::images/c-unit-mainc-initial.png[]
[start=6]
. Чтобы дать программе задачу, замените код в файле `main.c` на следующий код. В результате получится простая программа вычисления факториала:
[source,c]
----
#include <stdio.h>
#include <stdlib.h>
long factorial(int arg) {
long result = 1;
int i;
for (i = 2; i <= arg; ++i) {
result *= i;
}
return result;
}
int main(int argc, char** argv) {
printf("Type an integer and press Enter to calculate the integer's factorial: \n");
int arg;
fflush(stdout);
scanf("%d", &amp;arg);
printf("factorial(%d) = %ld\n", arg, factorial(arg));
return (EXIT_SUCCESS);
}
----
После редактирования файл принимает следующий вид:
image::images/c-unit-mainc-edited.png[]
[start=7]
. Сохраните файл нажатием клавиш Ctrl+S.
[start=8]
. Выполните сборку и запуск проекта, чтобы проверить его работоспособность. Для этого нажмите кнопку 'Выполнить' на панели инструментов IDE.
Если в качестве целого числа указать 8, должен получиться следующий результат:
image::images/c-unit-output-factorial.png[]
На некоторых платформах может потребоваться двукратное нажатие на клавишу Enter.
== Добавление тестов CUnit в управляемый проект NetBeans
В процессе разработки приложения полезно добавить модульные тесты.
Каждый тест должен содержать функцию `main` и создавать один исполняемый файл.
1. В окне 'Проекты' дважды щелкните исходный файл `main.c` и выберите Создать тест > Создать тест CUnit.
image::images/c-unit-create-test.png[]
Открывается мастер создания тестов.
[start=2]
. В окне 'Выбор элементов' установите флажок напротив функции `main`. В результате будут выбраны все функции в файле `main`. В нашей программе есть только одна функция - `factorial()`.
[start=3]
. Нажмите 'Далее'.
[start=4]
. Оставьте заданное по умолчанию имя New CUnit Test без изменения и нажмите 'Готово'.
В структуре папки 'Файлы тестов' появляется новый узел New CUnit Test.
Папка New CUnit Test содержит следующие шаблоны файлов для теста. В эту папку можно добавлять новые файлы тем же способом, каким вы добавляете исходные файлы в проект - с помощью команды в контекстном меню папки.
[start=5]
. Разверните структуру папки New CUnit Test. В этой структуре должен присутствовать файл `newcunittest.c`. Откройте этот файл в редакторе.
[start=6]
. В файле `newcunittest.c` обратите внимание на оператор `#include "CUnit/Basic.h"`, предназначенный для обращения к библиотеке CUnit. Файл `newcunittest.c` содержит автоматически генерируемую тестовую функцию `testFactorial` для функции `factorial()` в основном файле `main.c`.
image::images/c-unit-includes.png[]
Если среда IDE не обнаружила файл `CUnit/Basic.h`, можно изменить путь include, чтобы он указывал на правильное местоположение. Например, если библиотека CUnit установлена в Windows в каталог `C:\Tools\CUnit-2.1-2`, необходимо изменить путь на следующий:
`#include <C:\Tools\CUnit-2.1-2\CUnit\Headers\Basic.h>`
Созданный тест является заглушкой, которую следует отредактировать для создания более функциональных тестов, но этот тест может успешно выполняться и без редактирования.
== Выполнение теста C Unit
В среде IDE предусмотрено несколько способов выполнения тестов. Для запуска тестов можно щелкнуть правой кнопкой мыши узел проекта, папку 'Файлы теста или вложенную папку теста и выбрать Тест. Также можно выбрать команду Выполнить > Тестировать проект в строке меню или нажать сочетание клавиш Alt+F6.
1. Запустите тест, щелкнув правой кнопкой мыши папку New CUnit Test и выбрав 'Тест'.
В среде IDE открывается окно 'Результаты теста, в котором должны отображаться выходные данные, сходные с показанными ниже. Эти данные указывают на то, что тест не пройден.
Если окно 'Результаты теста' не отображается, откройте его самостоятельно. Для этого выберите Окно > Средства IDE > Результаты теста или нажмите сочетание клавиш Alt+Shift+R.
image::images/c-unit-run-test-orig.png[]
[start=2]
. Окно 'Результаты теста разделено на две части.
В правой части отображаются консольные выходные данные тестов. В левой части отображается сводная информация о пройденных и непройденных тестах, а также описание непройденных тестов.
[start=3]
. В окне 'Результаты теста дважды щелкните узел `testFactorial caused an ERROR` для перехода к функции `testFactorial` в редакторе исходного кода.
Очевидно, что эта функция сама по себе ничего не проверяет, а только подтверждает, что модульный тест не пройден, задавая параметр CU_ASSERT(0). Значение условия равно 0, что эквивалентно значению FALSE, поэтому инфраструктура CUnit интерпретирует это значение как неуспешный результат теста.
[start=4]
. Измените строку CU_ASSERT(0) на CU_ASSERT(1) и сохраните файл (Ctrl+S).
[start=5]
. Запустите тест повторно, щелкнув правой кнопкой мыши папку New CUnit Test и выбрав 'Тест'.
В окне 'Результаты теста выводятся данные, указывающие на то, что тест пройден.
image::images/c-unit-run-test-pass.png[]
== Добавление еще одного теста CUnit
1. Создайте общий шаблон теста CUnit. Для этого щелкните правой кнопкой мыши папку 'Файлы тестов' и выберите 'Создать тест CUnit'.
image::images/c-unit-new-cunit-test.png[]
[start=2]
. Назовите тест My CUnit Test (имя файла должно иметь вид `mycunittest`) и нажмите 'Готово'.
image::images/c-unit-create-mycunittest.png[]
[start=3]
. Создается новая папка теста My CUnit Test. Эта папка содержит файл `mycunittest.c`, который открывается в редакторе.
[start=4]
. Изучите файл теста `mycunittest.c`. Этот файл содержит два теста. Тест с именем test1 будет пройден, поскольку имеет значение TRUE, а тест с именем test2 завершится с ошибкой, поскольку имеет значение FALSE (2*2 не равно 5).
[source,java]
----
void test1()
{
CU_ASSERT(2*2 == 4);
}
void test2()
{
CU_ASSERT(2*2 == 5);
}
----
[start=5]
. Выполните тест так же, как предыдущий. Отобразится следующий результат:
image::images/c-unit-run-mytest1.png[]
[start=6]
. Выполните все тесты. Для этого в главном меню IDE выберите Запуск > Тестировать проект (Cpp_Application__x_). Будут выполнены оба набора тестов, и результаты их выполнения (успешные и неуспешные) отобразятся в окне 'Результаты теста'.
[start=7]
. Наведите указатель мыши на непройденный тест, чтобы просмотреть сведения об ошибке.
image::images/c-unit-test-fail-annotation.png[]
[start=8]
. С помощью кнопок в левой части окна 'Результаты теста' можно показать или скрыть пройденные или непройденные тесты.
== Отладка теста My CUnit Test
Отладка тестов осуществляется так же, как и отладка исходных файлов проекта. Процесс отладки описан в link:https://netbeans.org/kb/docs/cnd/debugging.html[+Практическом руководстве по отладке проектов C/C+++].
1. В окне 'Проекты' щелкните правой кнопкой мыши папку My CUnit Test и выберите 'Шаг с заходом в тест'.
Также можно запустить отладчик. Для этого щелкните тест правой кнопкой мыши в окне 'Результаты теста' и выберите 'Отладка'.
Отображается панель инструментов отладчика.
[start=2]
. Нажмите кнопку 'Шаг с заходом' для пошагового выполнения программы. При каждом нажатии этой кнопки выполняется один оператор.
image::images/c-unit-debug-icons.png[]
[start=3]
. Откройте окно 'Стек вызовов' (Окно > Отладка > Стек вызовов), чтобы просматривать вызовы функций во время пошагового выполнения теста.
== Добавление простого тeста
Простые тесты C используют собственную простую инфраструктуру тестирования IDE. Для использования простых тестов не требуется загружать отдельную инфраструктуру тестирования.
1. В окне 'Проекты' щелкните правой кнопкой мыши исходный файл ``main.c`` и выберите Создать тест > Создать простой тест C.
image::images/c-unit-mainc-new-simple-test.png[]
[start=2]
. В окне 'Выбор элементов' мастера создания тестов установите флажок напротив функции ``main`` и нажмите 'Далее'.
image::images/c-unit-mainc-new-simple-test-select.png[]
[start=3]
. В полях 'Имя' и 'Местоположение' оставьте заданное по умолчанию имя New C Simple Test и нажмите 'Готово'.
В структуре папки 'Файлы тестов' появляется новый узел New C Simple Test.
[start=4]
. Разверните структуру папки New C Simple. Эта папка должна содержать файл `newsimpletest.c`. Откройте этот файл в редакторе исходного кода.
image::images/c-unit-mainc-new-simple-test-folder.png[]
[start=5]
. Аналогично тесту CUnit файл `newsimpletest.c` содержит автоматически генерируемую тестовую функцию `testFactorial` для функции `factorial()` основного файла `main.c`.
image::images/c-unit-mainc-new-simple-test-code.png[]
Оператор ``if`` должен проверять условие. Если условие имеет значение true, тест считается непройденным. Маркер ``%%TEST_FAILED%%`` инициирует отображение графического обозначения неуспешного выполнения тестов в окне 'Результаты теста'. Оператор ``if`` в созданном тесте задает для условия значение true (1), поэтому при запуске этого теста без предварительного редактирования он всегда будет неуспешным.
Другие маркеры в функции ``main`` , такие как ``%%TEST_STARTED%%`` и ``%%TEST_FINISHED%%`` упрощают чтение выходных данных в командной строке при выполнении тестов.
Параметр ``time=0`` используется для добавления в тест измерения времени.
Параметр ``message`` позволяет выводить сообщение о неуспешном результате теста.
[start=6]
. Выполните тест. В окне 'Результаты теста' должен отобразиться неуспешный результат.
Теперь необходимо отредактировать файл теста, чтобы посмотреть успешное выполнение тестов.
== Изменение простого теста C
1. Скопируйте и вставьте новую функцию под функцией `testFactorial`.
Новая функция имеет вид:
[source,java]
----
void testNew() {
int arg = 8;
long result = factorial(arg);
if(result != 40320) {
printf("%%TEST_FAILED%% time=0 testname=testNew (newsimpletest) message=Error calculating %d factorial.\n", arg);
}
}
----
Функцию `main` также необходимо изменить, чтобы она могла вызывать новую тестовую функцию.
[start=2]
. Скопируйте следующие строки в функции `main`:
[source,java]
----
printf("%%TEST_STARTED%% testFactorial (newsimpletest)\n");
testFactorial();
printf("%%TEST_FINISHED%% time=0 testFactorial (newsimpletest)\n");
----
[start=3]
. Вставьте скопированные строки сразу под исходными и измените в скопированных строках имя `testFactorial` на `testNew`. Во всем файле необходимо изменить три вхождения.
Готовый файл `newsimpletest.c` выглядит следующим образом:
[source,c]
----
#include <stdio.h>
#include <stdlib.h>
/*
* Simple C Test Suite
*/
long factorial(int arg);
void testFactorial() {
int arg;
long result = factorial(arg);
if(1 /*check result*/) {
printf("%%TEST_FAILED%% time=0 testname=testFactorial (newsimpletest) message=When value is 1 this statement is executed.\n");
}
}
void testNew() {
int arg = 8;
long result = factorial(arg);
if(result != 40320) {
printf("%%TEST_FAILED%% time=0 testname=testNew (newsimpletest) message=Error calculating %d factorial.\n", arg);
}
}
int main(int argc, char** argv) {
printf("%%SUITE_STARTING%% newsimpletest\n");
printf("%%SUITE_STARTED%%\n");
printf("%%TEST_STARTED%% testFactorial (newsimpletest)\n");
testFactorial();
printf("%%TEST_FINISHED%% time=0 testFactorial (newsimpletest)\n");
printf("%%TEST_STARTED%% testNew (newsimpletest)\n");
testNew();
printf("%%TEST_FINISHED%% time=0 testNew (newsimpletest)\n");
printf("%%SUITE_FINISHED%% time=0\n");
return (EXIT_SUCCESS);
}
----
[start=4]
. В окне 'Проекты' запустите тест, щелкнув правой кнопкой мыши папку New C Simple Test и выбрав 'Тест'.
В окне 'Результаты теста' должны отобразиться следующие данные:
image::images/c-unit-simpletest-results.png[]
Если вы не уверены, что тест testNew пройден, нажмите значок в виде зеленой галочки в левой части окна 'Результаты теста', чтобы просмотреть все пройденные тесты.
Маркер %%TEST_FAILED%% инициирует отображение неуспешного результата теста в окне 'Результаты теста'. Оператор if должен проверять условие. Если это условие не имеет значения true, результат теста будет неуспешным.
Маркер %%SUITE_STARTING%% и другие подобные маркеры не выводятся в окне результатов в среде IDE. Эти маркеры используются для консольного вывода.
== Выполнение тестов в интерфейсе командной строки
Тесты можно создавать в командной строке за пределами IDE с помощью команды `make build-tests` и выполнять с помощью команды `make test`. Если проект находится в каталоге ~/NetBeansProjects/Cpp_Application__x_ в системе Linux, сборка и выполнение тестов будут выполняться, как показано ниже.
1. Откройте окно терминала в IDE (выберите Окно > Результаты и нажмите кнопку 'Терминал' в левой части окна 'Результаты'). В рабочем каталоге текущего проекта откроется окно терминала.
2. В окне терминала введите команды, выделенные полужирным шрифтом:
[source,java]
----
*make test*
----
Результаты сборки и выполнения теста должны выглядеть примерно так. Примечание. Некоторые результаты команды `make` удалены.
[source,java]
----
"make" -f nbproject/Makefile-Debug.mk QMAKE= SUBPROJECTS= .build-conf
make[1]: Entering directory `/home/tester/NetBeansProjects/CppApplication_1'
"make" -f nbproject/Makefile-Debug.mk dist/Debug/GNU-Linux-x86/cppapplication_1
make[2]: Entering directory `/home/tester/NetBeansProjects/CppApplication_1'
make[2]: `dist/Debug/GNU-Linux-x86/cppapplication_1' is up to date.
...
CUnit - A Unit testing framework for C - Version 2.1-2
http://cunit.sourceforge.net/
Suite: mycunittest
Test: test1 ... passed
Test: test2 ... FAILED
1. tests/mycunittest.c:33 - 2*2 == 5
Test: test3 ... passed
--Run Summary: Type Total Ran Passed Failed
suites 1 1 n/a 0
tests 3 3 2 1
asserts 3 3 2 1
%SUITE_STARTING% newsimpletest
%SUITE_STARTED%
%TEST_STARTED% testFactorial (newsimpletest)
%TEST_FAILED% time=0 testname=testFactorial (newsimpletest) message=error message sample
%TEST_FINISHED% time=0 testFactorial (newsimpletest)
%SUITE_FINISHED% time=0
CUnit - A Unit testing framework for C - Version 2.1-2
http://cunit.sourceforge.net/
Suite: newcunittest
Test: testFactorial ... passed
--Run Summary: Type Total Ran Passed Failed
suites 1 1 n/a 0
tests 1 1 1 0
asserts 1 1 1 0
make[1]: Leaving directory `/home/tester/NetBeansProjects/CppApplication_1'
----
== Добавление поддержки других инфраструктур тестирования
Чтобы добавить поддержку предпочтительной инфраструктуры тестирования C/C++, необходимо создать модуль NetBeans. См. документ для разработчиков NetBeans, link:http://wiki.netbeans.org/CND69UnitTestsPluginTutotial[+Руководство по созданию подключаемого модуля тестирования C/C+++] в статье о NetBeans.
link:mailto:users@cnd.netbeans.org?subject=Feedback:%20Adding%20Unit%20Tests%20to%20a%20C/C++%20Project%20-%20NetBeans%20IDE%207.4%20Tutorial[+Отправить отзыв по этому учебному курсу+]