zoukankan      html  css  js  c++  java
  • Boost.Test 夹具的使用

    夹具,特别像:一个汉堡包,上面一层,下面一层!

    中间夹着相应的测试

    级别:

    • 全局夹具
    • 测试套件夹具
    • 测试用例夹具
    可以说,是:十分的合理了
     
    用例级别的夹具:
    1. #ifndef BOOSTLEARN_TEST3_H
    2. #define BOOSTLEARN_TEST3_H
    3. #include"boost/test/unit_test.hpp"
    4. #include<iostream>
    5. #include<string>
    6. struct fixture_case1{
    7. fixture_case1(){
    8. i=0;
    9. name="";
    10. std::cout<<"夹具开始"<<std::endl;
    11. };
    12. int i;
    13. std::string name;
    14. ~fixture_case1(){
    15. std::cout<<"夹具结束"<<std::endl;
    16. }
    17. };
    18. BOOST_AUTO_TEST_SUITE( s_suit3 )
    19. BOOST_FIXTURE_TEST_CASE( t_case1,fixture_case1 )
    20. {
    21. BOOST_CHECK_EQUAL(1,3);
    22. }
    23. BOOST_AUTO_TEST_CASE( t_case2 )
    24. {
    25. BOOST_CHECK_EQUAL(1,1);
    26. }
    27. BOOST_AUTO_TEST_SUITE_END()
    28. #endif//BOOSTLEARN_TEST3_H
     
     

    测试套件夹具

    1. #ifndef BOOSTLEARN_TEST3_H
    2. #define BOOSTLEARN_TEST3_H
    3. #include"boost/test/unit_test.hpp"
    4. #include<iostream>
    5. #include<string>
    6. struct fixture_case1{
    7. fixture_case1(){
    8. i=0;
    9. name="case1";
    10. std::cout<<"case1夹具开始"<<std::endl;
    11. };
    12. int i;
    13. std::string name;
    14. ~fixture_case1(){
    15. std::cout<<"case1夹具结束"<<std::endl;
    16. }
    17. };
    18. struct fixture_suit1{
    19. fixture_suit1(){
    20. i=0;
    21. name="suit1";
    22. std::cout<<"suit1夹具开始"<<std::endl;
    23. };
    24. int i;
    25. std::string name;
    26. ~fixture_suit1(){
    27. std::cout<<"suit1夹具结束"<<std::endl;
    28. }
    29. };
    30. BOOST_FIXTURE_TEST_SUITE( s_suit3,fixture_suit1 )
    31. BOOST_FIXTURE_TEST_CASE( t_case1,fixture_case1 )
    32. {
    33. BOOST_CHECK_EQUAL(1,3);
    34. name="徐锦涛";
    35. BOOST_CHECK_MESSAGE(1==2,"错误:"+name);
    36. }
    37. BOOST_AUTO_TEST_CASE( t_case2 )
    38. {
    39. BOOST_CHECK_EQUAL(1,1);
    40. BOOST_CHECK_MESSAGE(1==2,"错误:"+name);
    41. }
    42. BOOST_AUTO_TEST_SUITE_END()
    43. #endif//BOOSTLEARN_TEST3_H
    输出结果:
    1. Running 7 test cases...
    2. case1夹具开始
    3. /Users/guabutian/Documents/codeWorld/CandC++/C/BoostLearn/src/test/test3.h:41: error: in "s_suit3/t_case1": check 1 == 3 has failed [1 != 3]
    4. /Users/guabutian/Documents/codeWorld/CandC++/C/BoostLearn/src/test/test3.h:43: error: in "s_suit3/t_case1": 错误:徐锦涛
    5. case1夹具结束
    6. suit1夹具开始
    7. /Users/guabutian/Documents/codeWorld/CandC++/C/BoostLearn/src/test/test3.h:49: error: in "s_suit3/t_case2": 错误:suit1
    8. suit1夹具结束
    9. *** 3 failures are detected in the test module "TestUnit"
    可以看到:
    除了全局夹具之外,其他的夹具都是作用到case上的,而且,case里的夹具会掩盖suit的夹具
    全局夹具,则是给整个测试模块加的夹具
    1. //
    2. // Created by 瓜不甜 on 2018/1/17.
    3. //
    4. #ifndef BOOSTLEARN_TEST3_H
    5. #define BOOSTLEARN_TEST3_H
    6. #include"boost/test/unit_test.hpp"
    7. #include<iostream>
    8. #include<string>
    9. struct fixture_case1{
    10. fixture_case1(){
    11. i=0;
    12. name="case1";
    13. std::cout<<"case1夹具开始"<<std::endl;
    14. };
    15. int i;
    16. std::string name;
    17. ~fixture_case1(){
    18. std::cout<<"case1夹具结束"<<std::endl;
    19. }
    20. };
    21. struct fixture_suit1{
    22. fixture_suit1(){
    23. i=0;
    24. name="suit1";
    25. std::cout<<"suit1夹具开始"<<std::endl;
    26. };
    27. int i;
    28. std::string name;
    29. ~fixture_suit1(){
    30. std::cout<<"suit1夹具结束"<<std::endl;
    31. }
    32. };
    33. struct fixture{
    34. fixture(){
    35. i=0;
    36. gname="suit1";
    37. std::cout<<"全局夹具开始"<<std::endl;
    38. };
    39. int i;
    40. std::string gname;
    41. ~fixture(){
    42. std::cout<<"全局夹具结束"<<std::endl;
    43. }
    44. };
    45. // 定义全局夹具
    46. BOOST_GLOBAL_FIXTURE(fixture);
    47. BOOST_FIXTURE_TEST_SUITE( s_suit3,fixture_suit1 )
    48. BOOST_FIXTURE_TEST_CASE( t_case1,fixture_case1 )
    49. {
    50. BOOST_CHECK_EQUAL(1,3);
    51. name="徐锦涛";
    52. BOOST_CHECK_MESSAGE(1==2,"错误:"+name);
    53. }
    54. BOOST_AUTO_TEST_CASE( t_case2 )
    55. {
    56. BOOST_CHECK_EQUAL(1,1);
    57. BOOST_CHECK_MESSAGE(1==2,"错误:"+name);
    58. }
    59. BOOST_AUTO_TEST_CASE( t_case3 )
    60. {
    61. BOOST_CHECK_EQUAL(1,1);
    62. }
    63. BOOST_AUTO_TEST_SUITE_END()
    64. #endif//BOOSTLEARN_TEST3_H
    但,在我这里发现了个问题:全局夹具的成员变量貌似没有办法在case里使用,我觉得,有空要研究下源码,这样的话,才可以,完全掌握这个东西
  • 相关阅读:
    SQL之CASE WHEN用法详解
    MySQL笔记汇总
    Linux常用命令
    TCP/IP速记
    数据结构和算法速记
    多线程相关概念
    线程安全&Java内存模型
    线程通讯wait&notify
    创建多线程的4种方式
    重写ThreadPoolTaskExecutor
  • 原文地址:https://www.cnblogs.com/xujintao/p/8325204.html
Copyright © 2011-2022 走看看