Карта сайта Kansoftware
НОВОСТИУСЛУГИРЕШЕНИЯКОНТАКТЫ
Разработка программного обеспечения

Expected failures specification

Boost , Boost.Test , Writing unit tests

Boost C++ Libraries

...one of the most highly regarded and expertly designed C++ library projects in the world. Herb Sutter and Andrei Alexandrescu, C++ Coding Standards

PrevUpHomeNext

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

Эта функция позволяет указать ожидаемое количество несостоявшихся утверждений на единицу тестирования. Значение указывается во время строительства тестового дерева и не может быть обновлено во время выполнения теста.

Эта функция не предназначена для проверки ожидаемых сбоев функциональности. Чтобы проверить, что конкретный вход вызывает исключение, которое будет использовано<BOOST_<level>_THROW>Семейство тестовых инструментов.

Использование этой функции должно быть ограничено и использоваться только после тщательного рассмотрения. В общем, вы должны использовать эту функцию только тогда, когда необходимо заставить тестовый модуль пройти без фактического устранения проблемы. Очевидно, что чрезмерное использование ожидаемых отказов противоречит цели испытания устройства. В большинстве случаев его нужно применять только временно.

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

[Note] Note

Если неисправное утверждение фиксируется и передается, в то время как спецификация ожидаемых отказов все еще присутствует, количество отказов становится меньше, чем ожидалось. Об испытании будет сообщено как пройденное; вместо этого будет выпущено предупреждающее сообщение.

Expected failure specification

Декоратор<expected_failures>определяет количество утверждений, которые, как ожидается, потерпят неудачу в соответствующем испытательном блоке. Сообщается о неудаче, когда число неудачных утверждений превышает заявленное ожидаемое число неудач. Если количество неудачных утверждений меньше, чем количество ожидаемых неудач, сообщение сообщается. Общее количество ожидаемых сбоев для данного набора<S>является суммой заявленных ожидаемых сбоев в<S>и суммой ожидаемых сбоев во всех вложенных тестовых блоках:

Example: decorator expected_failures

Код

<
#defineBOOST_TEST_MODULEdecorator_10
#include<boost/test/included/unit_test.hpp>
namespaceutf=boost::unit_test;
BOOST_AUTO_TEST_SUITE(suite1,
 *utf::expected_failures(1))
 BOOST_AUTO_TEST_CASE(test1,
   *utf::expected_failures(2))
 {
   BOOST_TEST(false);
   BOOST_TEST(false);
 }
 BOOST_AUTO_TEST_CASE(test2)
 {
   BOOST_TEST(false);
   BOOST_TEST(false);
 }
BOOST_AUTO_TEST_SUITE_END()
>

выход

<
>decorator_10
Running2testcases...
test.cpp(11):error:in"suite1/test1":checkfalsehasfailed
test.cpp(12):error:in"suite1/test1":checkfalsehasfailed
test.cpp(17):error:in"suite1/test2":checkfalsehasfailed
test.cpp(18):error:in"suite1/test2":checkfalsehasfailed
***4failuresaredetected(3failuresareexpected)inthetestmodule"decorator_10"
>decorator_10--run_test=suite1/test1
Running1testcase...
test.cpp(11):error:in"suite1/test1":checkfalsehasfailed
test.cpp(12):error:in"suite1/test1":checkfalsehasfailed
***Noerrorsdetected
>

В приведенном выше примере мы сначала запускаем все тестовые случаи с четырьмя неудачными утверждениями. Общее количество ожидаемых отказов составляет 3:1 (для испытания<suite1>) +2 (для<test1>). Поскольку ожидаемое количество отказов превышено, сообщается об ошибке. Во втором случае мы запускаем только тестовый случай<suite1/test1>: происходят два сбоя, ожидаются два сбоя, поэтому об ошибке не сообщается.

Usage with automatically registered test cases

[Caution] Caution

Это использование считается обесцененным. Пожалуйста, подумайте об использовании<expected_failures>декоратора.

Для обратной совместимости можно указать ожидаемые сбои с<BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES>до определения тестового случая.

BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(test_case_name, number_of_expected_failures);

Вы можете использовать этот макрос как в области файлов, так и в тестовом наборе. Кроме того, вы можете использовать его, даже если название тестовых блоков совпадает в разных наборах тестов. Спецификация ожидаемых отказов применяется к испытательному блоку, принадлежащему к тому же набору тестов, где находится<BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES>.

Example: Expected failures specification for automatically registered test case

Код

<
#defineBOOST_TEST_MODULEexample
#include<boost/test/included/unit_test.hpp>
BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(my_test1,1)
BOOST_AUTO_TEST_CASE(my_test1)
{
 BOOST_TEST(2==1);
}
BOOST_AUTO_TEST_SUITE(internal)
BOOST_AUTO_TEST_CASE_EXPECTED_FAILURES(my_test1,2)
BOOST_AUTO_TEST_CASE(my_test1)
{
 BOOST_CHECK_EQUAL(sizeof(int),sizeof(char));
 BOOST_CHECK_EQUAL(sizeof(int*),sizeof(char));
}
BOOST_AUTO_TEST_SUITE_END()
>

выход

<
>example--report_level=short
Running2testcases...
test.cpp(10):errorin"my_test1":check2==1hasfailed
test.cpp(21):errorin"my_test1":checksizeof(int)==sizeof(char)hasfailed[4!=1]
test.cpp(22):errorin"my_test1":checksizeof(int*)==sizeof(char)hasfailed[4!=1]
Testsuite"example"passedwith:
 3assertionsoutof3failed
 3failuresexpected
 2testcasesoutof2passed
>

Usage with manually registered test cases

[Caution] Caution

Это использование считается обесцененным. Пожалуйста, подумайте об использовании<expected_failures>декоратора.

Чтобы установить значение ожидаемых отказов для зарегистрированного вручную испытательного блока, передайте его в качестве второго аргумента для вызова<test_suite::add>во время регистрации испытательного блока.

Example: Expected failures specification for manually registered test case

Код

<
#include<boost/test/included/unit_test.hpp>
usingnamespaceboost::unit_test;
voidfree_test_function()
{
 BOOST_TEST(2==1);
}
test_suite*init_unit_test_suite(int,char*[])
{
 framework::master_test_suite().
   add(BOOST_TEST_CASE(&free_test_function),2);
 return0;
}
>

выход

<
>example--log_level=message
Running1testcase...
test.cpp(8):errorin"free_test_function":check2==1hasfailed
Testcasehaslessfailuresthenexpected
***Noerrorsdetected
>



PrevUpHomeNext

Статья Expected failures specification раздела Boost.Test Writing unit tests может быть полезна для разработчиков на c++ и boost.




Материалы статей собраны из открытых источников, владелец сайта не претендует на авторство. Там где авторство установить не удалось, материал подаётся без имени автора. В случае если Вы считаете, что Ваши права нарушены, пожалуйста, свяжитесь с владельцем сайта.



:: Главная :: Writing unit tests ::


реклама


©KANSoftWare (разработка программного обеспечения, создание программ, создание интерактивных сайтов), 2007
Top.Mail.Ru

Время компиляции файла: 2024-08-30 11:47:00
2025-05-19 21:21:30/0.03029203414917/1