Friday, 4 May 2012

Mockowanie funkcji języka C za pomocą HippoMocks

Hej!

Dzisiaj pokażę Wam, jak za pomocą ostatniej działającej wersji szkieletu HippoMocks zastąpić funkcję z języka C swoją własną (innymi słowy, to będzie tzw. mock funkcji). Jako że życie to nie film, do takiego przedsięwzięcia będziemy potrzebować kompilatora C++ (innymi słowy - nawet jeśli Twój produkt jest cały pisany w C, to na potrzeby testów jednostkowych musisz kompilować go kompilatorem C++).

Moje środowisko (na wszelki wypadek, gdyby coś komuś nie chodziło):
1. Kompilator g++ 4.6.3
2. System operacyjny Ubuntu Linux 12.04 z zainstalowanym pakietem build-essentials
3. Nagłówek hippomocks.h ściąnięty ze strony http://www.assembla.com/code/hippomocks/git/nodes/master/HippoMocks/hippomocks.h (należy kliknąć ikonkę Download).
4. Platformę X86 (bodajże na x86-64 też powinno działać) - Sparc, sorry...

Teraz jedna mała uwaga: biblioteka HippoMocks w całości zawarta jest w jednym pliku nagłówkowym hippomocks.h. Ten plik musimy sobie dorzucić do swojej kompilacji. Natomiast sama kompilacja tego pliku może nie przejść!! U mnie wysypywał się na instrukcji prinff(), do której nie miał nagłówka:

../src/hippomocks.h:3990:94: error: ‘printf’ was not declared in this scope
make: *** [src/Main.o] Błąd 1

Na szczęście można temu szybko zaradzić, znajdując w hippomocks.h pierwszy ciąg instrukcji #include i dodając tam: #include <stdio.h>

No i na koniec mały przykład, jak to działa:

#include <iostream>
#include "hippomocks.h"

int ReturnOne()
{
  return 1;
}

int main()
{
  HippoMocks::MockRepository mocks;
  mocks.OnCallFunc(::ReturnOne).Return(123);

  std::cout << ReturnOne() << std::endl; // 123
  return 0;

Powodzenia!

No comments: