Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unit testing operator<< in C++

I'm trying to figure out a nice way to unit test my implementation of the operator<< in C++. I have a class which implements the operator, and given an instance with a specific state, I'd like to check that the output is what I want it to be.

This is my code (the header file):

class Date {
    virtual int year() const { return 1970; };
    virtual int month() const { return 1; };
    virtual int day() const { return 1; };
    friend  std::ostream &operator<<(std::ostream &os, const Date &d);
};

std::ostream &operator<<(std::ostream &os, const Date &d) {
    os << d.year() << "-" << d.month() << "-" << d.day();
    return os;
};

Now, in my unit test method, I could just do Date d; cout << d; and verify when I run the tests that the output is correct. However, I'd much rather programmatically verify this, so I don't have to look at the test output more than at the final report (which hopefully says "0 failed tests!").

I'm fairly new with C++, so I've never really used streams for anything but input and output.

How do I accomplish this?

like image 616
Tomas Aschan Avatar asked Oct 24 '12 20:10

Tomas Aschan


1 Answers

You can use a std::stringstream to hold the result, and then call str() on it to get a string:

#include "Date.h"

#include <iostream>
#include <sstream>

int main() {
    Date d;
    std::stringstream out;
    out << d;
    if(out.str() == "1970-1-1") {
        std::cout << "Success";
    } else {
        std::cout << "Fail";
    }
}

Note: I spent quite a while looking for a decent unit testing framework in C++ and the best I found at the time was googletest -- in case you haven't picked a framework yet.

like image 126
Brendan Long Avatar answered Nov 17 '22 08:11

Brendan Long