2017-12-05 5 views
0

Wie kann ich mit googletest eine Funktion testen, die auf Benutzereingaben über std :: cin angewiesen ist?Verwenden Sie googletest mit einer Funktion, die vom Benutzer über std :: cin eingegeben wird?

Für das Beispiel unten, ich bin auch immer Code suchen würde mir erlauben, „2 \ n“ zum std :: cin Stream hinzuzufügen, so dass die readUserInput() Funktion 2 in die Wertvariable liest und nicht erfordern irgendeine Eingabe vom Benutzer.

#include <iostream> 
#include "gtest/gtest.h" 

int readUserInput() 
{ 
    int value; 
    std::cout << "Enter a number: "; 
    std::cin >> value; 

    return value; 
} 

TEST(cin_test, Basic) 
{ 
    // need code here to define "2\n" 
    // as the next input for std::cin 

    ASSERT_EQ(readUserInput(), 2); 
} 

int main(int argc, char **argv) { 
    ::testing::InitGoogleTest(&argc, argv); 
    return RUN_ALL_TESTS(); 
} 

Antwort

2

ein Argument an Ihre Funktion hinzufügen:

int readUserInput(std::istream& input) 
{ 
    int value; 
    std::cout << "Enter a number: "; 
    input >> value; 
    return value; 
} 

TEST(Some, Test) { 
    std::ifstream ifs; 
    ifs.open("someFile", std::ifstream::in); 
    // in production code pass std::cin 
    std::cout << "readUserInput from std::cin: " << readUserInput(std::cin) << std::endl; 
    // in testing pass some mock data from the file (or whatever) 
    std::cout << "readUserInput from ifs: " << readUserInput(ifs) << std::endl; 
    ifs.close(); 
} 
Verwandte Themen