(对不起我的英文)我试图用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);
}
答案 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;
}