单元测试Scanf

时间:2016-11-04 12:07:53

标签: c++ visual-studio unit-testing testing

(对不起我的英文)我试图用c ++代码进行单元测试。在下一个功能(菜单)中,没有任何参数进入()。但是在这个功能中有一个scanf,我想测试,但我还没有想到如何制作它。

我可以从单元测试中测试scanf吗?

谢谢。

功能代码:

void principal::menu()
{
    int choice;
    system("cls");
    printf("\n--------MENU--------");
    printf("\n1 : Jugador X");
    printf("\n2 : Jugador O");
    printf("\n3 : Sortir");
    printf("\nTria el tipus de jugador: ");
    scanf_s("%d", &choice);
    turn = 1;
    switch (choice)
    {
    case 1:
        player = 1;
        comp = 0;
        player_first();
        break;
    case 2:
        player = 0;
        comp = 1;
        start_game();
        break;
    case 3:
        exit(1);
    default:
        menu();
    }
}

来自测试的代码:

...
TEST_METHOD(menu){
   principal p; //this is the class --> not matter now

   //test code
}

如果代码有参数,我使用下一个代码:

 ...
 TEST_METHOD(menu){
   principal p; //this is the class --> not matter now

   //test code
   Assert::AreEqual(result, parameter to enter);
}

1 个答案:

答案 0 :(得分:1)

如果你使用C ++函数cin和cout,你可以重定向缓冲区。

E.g。

#include <iostream>
#include <sstream>
#include <random>
#include <ctime>

int main()
{
    auto cout_buf = std::cout.rdbuf();
    std::stringbuf sb;
    std::cin.rdbuf(&sb);
    std::cout.rdbuf(&sb);

    std::mt19937 rand(time(nullptr));
    std::cout << (rand() % 100);

    int number;
    std::cin >> number;

    std::cout.rdbuf(cout_buf);
    std::cout << "The number was " << number << std::endl;

    return 0;
}