// 
//     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[+Отправить отзыв по этому учебному курсу+]


