Содержание материала

Все в общем-то просто, поэтому перейдем к примеру:

в файле test.h

class	Foo{
	int	f1( int i );
	// будет экспортироваться функция tstf1
	SET_FRIENDSHIP_1R( tstf1 , int , void )
public:
	int	f2( int i );

	static void	f3( void );
};

в файле test.cpp

// тут идет определение функций


// здесь можно вставить секцию для unit-тестирования

BEGIN_TESTING_SECTION()
	ENABLE_CLASS_TESTING( Foo )

	// тестирование функции f1
	CLASS_MEMBER_FUNCTION_TESTING_1( Foo, f1, tstf1, int, int, int )

	// тестирование функции f2
	CLASS_MEMBER_FUNCTION_TESTING_1R( Foo, f2, tstf1, int, int , int )

	// тестирование функции f3
	// функция f3 ничего не возвращает
	FUNCTION_TESTING_1( Foo::f3, tstf3 , void , NO_RET )
END_TESTING_SECTION()

Теперь все это компилируем в dllшку и пишем unit-тест.

Unit-тест представляет из себя скрипт на питоне, в котором через ctypes загружается либка, и дёргаются экспортируемые функции, так или иначе участвующие в тестировании.

Содержание примерно следующее (пусть файл назвается foo_test.py):

#!/usr/python
# -*- coding: cp1251 -*-

from base import *

import time

#	создаем тестовые данные
foo = file.LoadModule( "foo" );

foo.CreateObject( "default" );

foo.tstf1()

foo.tstf2( 1 );

#	запускаем тестовый стенд и проверяем результат, с которым стенд отработал
if( foo.tstf3( 2 ) == 0 ):
	print( "TEST PASSED" );
else:
	print( "ERROR" );

В общем-то ничего сложного. Единственное на что здесь стоит обратить внимание — так это на вывод print( "ERROR" ). Дело в том что определение того корректно ли отработал unit-тест или нет, определяется наличием в stdout или stderr подстроки error (буквы этой подстроки могут быть в любом регистре). Если такой подстроки не было найдено, то автотест считается отработавшим корректно.

Добавить комментарий


Защитный код
Обновить