2013年2月6日水曜日

CppUnitLite

CppUnit のオリジナル作者である Michael Feathers が作成した CppUnitLite を試してみる。著書「レガシーコード改善ガイド」によると CppUnit よりシンプルに使えることを目指しているとのこと。
  1. Object Mentor Downloads にある CppUnitLite から CppUnitLite.zip をダウンロードする
  2. ダウンロードしたファイルを展開すると StackMain.cpp, StackTest.cpp, Stack.h とCppUnitLite フォルダがある
  3. Makefile を書く
    CC = g++
    STACK_SRC = \
     StackMain.cpp \
     StackTest.cpp
    
    CPPUNITLITE_SRC = \
     CppUnitLite/Test.cpp \
     CppUnitLite/TestResult.cpp \
     CppUnitLite/TestRegistry.cpp \
     CppUnitLite/Failure.cpp \
     CppUnitLite/SimpleString.cpp
    
    default: StackMain.exe
    
    StackMain.exe:
     $(CC) -o $@ $(STACK_SRC) $(CPPUNITLITE_SRC)
    
  4. コンパイル & 実行
    > make
    g++ -o StackMain.exe StackMain.cpp StackTest.cpp CppUnitLite/Test.cpp CppUnitLite/TestResult.cpp CppUnitLite/TestRegistry.cpp CppUnitLite/Failure.cpp CppUnitLite/SimpleString.cpp
    
    > StackMain.exe
    There were no test failures
    

自分でクラスを作ってテストを書いてみる
Example 4. Counter.h
#ifndef __COUNTER_H__
#define __COUNTER_H__

class Counter {
 private:
 int count;

 public:
 Counter();
 ~Counter();
 int get() const;
 void increment();
 void clear();
};

#endif /* __COUNTER_H__ */
Example 5. Counter.cpp
#include "Counter.h"

// Constractor
Counter::Counter()
{
 count = 0;
}

// Destructor
Counter::~Counter()
{

}

// 値を取得
int Counter::get(void) const
{
 return count;
}

void Counter::increment(void)
{
 count++;
}

void Counter::clear(void)
{
 count = 0;
}
Example 6. CounterTest.cpp
#include "CppUnitLite\TestHarness.h"
#include "Counter.h"

#include <string>

SimpleString StringFrom(const std::string& value)
{
 return SimpleString(value.c_str());
}

TEST(Counter, creation)
{
 Counter c;

 LONGS_EQUAL(0, c.get()); // 初期値は 0
 c.increment();
 LONGS_EQUAL(1, c.get()); // +1 されている
 c.clear();
 LONGS_EQUAL(0, c.get()); // clear したら 0 になっている
 LONGS_EQUAL(-1, c.get()); // 失敗例
}

int main(void)
{
 TestResult tr;
 TestRegistry::runAllTests(tr);

 return 0;
}
Example 7. Makefile
CC = g++
CPPUNITLITE_SRC = \
 CppUnitLite/Test.cpp \
 CppUnitLite/TestResult.cpp \
 CppUnitLite/TestRegistry.cpp \
 CppUnitLite/Failure.cpp \
 CppUnitLite/SimpleString.cpp

COUNTER_SRC = \
 Counter.cpp \
 CounterTest.cpp

CounterTest.exe:
 $(CC) -o $@ $(COUNTER_SRC) $(CPPUNITLITE_SRC)

clean:
 rm -rf *.exe
コンパイル & 実行
> make CounterTest.exe
g++ -o CounterTest.exe Counter.cpp CounterTest.cpp CppUnitLite/Test.cpp CppUnitLite/TestResult.cpp CppUnitLite/TestRegistry.cpp CppUnitLite/Failure.cpp CppUnitLite/SimpleString.cpp

> CounterTest.exe
Failure: "expected -1 but was: 0" line 20 in CounterTest.cpp
There were 1 failures

0 件のコメント:

コメントを投稿