2010-11-16 19 views
7

Obecnie uczę się testu jednostki. Prawie test jednostkowy używaj wartości zwracanej lub wartości odniesienia jako wartości oczekiwanej w teście. Jeśli nie ma zwróconej wartości i wartości odniesienia w funkcji. Jaka jest oczekiwana wartość?Sposób zapisywania funkcji testu urządzenia na stdout/std :: cout

exsample-

void unit_test() 
{ 
    cout << "Hello" << endl; 
} 

Jasne, unit_test funkcja jest bardzo prosta. Tak więc ta funkcja nie wymaga testu urządzenia. Ale, to tylko próbka. Czy uważasz, że funkcja unit_test ma efekt uboczny.

Dziękuję, wszystko i proszę zrozumieć mój angielski głupi.

Odpowiedz

11

Jeśli piszesz funkcję znasz należy przetestować, t kura powinieneś zaprojektować ją do testowania w swojej strukturze. Tutaj, jeśli twoje testy są wykonywane na poziomie procesu, na którym możesz zweryfikować wynik procesu, zapisywanie na std :: cout jest w porządku. W przeciwnym razie może chcesz, aby sygnał wyjściowy strumień parametr do funkcji, na przykład:

void unit_test(std::ostream& os = std::cout) 
{ 
    os << "Hello" << endl; 
} 

Wtedy można go przetestować, jak w:

std::ostringstream oss; 
unit_test(oss); 
assert(oss && oss.str() == "Hello"); 

Jak ilustruje to, co dobrze przetestowane oprogramowanie wymaga odrobiny dawania i odbierania ... wymagań testowych wracamy do projektu.

EDIT: jeśli trzeba przetestować wcześniej istniejących funkcji, bez ich zmiany, a następnie rozważyć:

#include <sstream> 
#include <iostream> 

void f() 
{ 
    std::cout << "hello world\n"; 
} 

int main() 
{ 
    std::ostringstream oss; 
    std::streambuf* p_cout_streambuf = std::cout.rdbuf(); 
    std::cout.rdbuf(oss.rdbuf()); 

    f(); 

    std::cout.rdbuf(p_cout_streambuf); // restore 

    // test your oss content... 
    assert(oss && oss.str() == "hello world\n"; 
    std::cout << oss.str(); 
} 
+0

o assert (oss && oss.str() == "Hello")? – Chubsdad

+0

Zgadzam się z Twoją opinią. Mówiłeś TDD, w porządku? Ale, w międzyczasie, rozpocząłem test jednostkowy. a nasze zakończenie programu zakończyło się. niestety nasz program nie miał TDD.Tak więc testowanie jednostek jest trudne, ponieważ nasz program nie uwzględniał testu jednostki podczas projektowania. Ten problemowy atak w mojej głowie !!!! (W każdym razie, dziękuję za odpowiedź! – cardbt

+0

@Chubsdad: uczciwe połączenie, dzięki :-). Zaktualizuję. –

0

Jednostka testująca funkcję, która zwraca void, zazwyczaj wymaga wysłania jej danych wejściowych i przechwycenia wyjątków, które funkcja może wyrzucić w przypadku podania błędnych danych. Twoja funkcja nie pobiera żadnych danych wejściowych, więc testowanie urządzenia wydaje się niepotrzebne, chyba że chcesz przetestować ekstremalne warunki, takie jak brak pamięci podczas wywoływania funkcji.

+0

dziękuję za odpowiedź. Miłego dnia ~ – cardbt

0

Ogólnie rzecz biorąc, nie stosuje się procedur testowania jednostkowego (tj. Takich fragmentów kodu, które wprowadzono, które nie pobierają żadnych danych wejściowych i nie zwracają żadnych wartości). Na początek spróbuj przetestować coś, co jest funkcją (pobiera pewne parametry i zwraca niektóre wartości).

Oznacza to, że testujesz efekty uboczne - jedynym efektem ubocznym dostarczonej funkcji są znaki wysyłane do konsoli, co prawdopodobnie rzadko jest testowane.

Spójrz na tego podkładu:

czy to jedno:

+0

Zapraszamy, chętnie pomożemy! –

Powiązane problemy