Redirect both cout and stdout to a string in C++ for Unit Testing

前端 未结 4 1304
一个人的身影
一个人的身影 2020-12-03 02:49

I\'m working on getting some legacy code under unit tests and sometimes the only way to sense an existing program behavior is from the console output.

I see lots of

4条回答
  •  心在旅途
    2020-12-03 03:25

    std::stringstream may be what you're looking for.

    UPDATE
    Alright, this is a bit of hack, but maybe you could do this to grab the printf output:

    char huge_string_buf[MASSIVE_SIZE];
    freopen("NUL", "a", stdout);
    setbuf(stdout, huge_string_buffer);
    

    Note you should use "/dev/null" for linux instead of "NUL". That will rapidly start to fill up huge_string_buffer. If you want to be able to continue redirecting output after the buffer is full you'll have to call fflush(), otherwise it will throw an error. See std::setbuf for more info.

提交回复
热议问题