2015年03月17日

Google Test Trial(1)

現在、気温24度、湿度72%でございます。
当然、Tシャツ1枚の格好です。
あー、やってらんない。眠い。

Google Test君の試用記1でございます。
前回も書きますたが、わたすの環境はubuntu 14.04でございます。

まず、フォルダ構成ですが、以下のとおりだす。
自分の home 直下に、sample1 フォルダを作成する想定です。
runTest フォルダは自動生成させますので、作る必要はありません。
sample1
 │
 ├Makefile
 ├src┬sample1.c
 │  └TEST_sample1.cpp
 │
 └runTest
    ├bin
    ├build
    ├doc
    └doc.tgz

次に、Makefile 君だす。
こりは、こちらのものをパクらせていただきますた。
# ソースの配置場所設定
TARGET_SRC = sample1
BASE_DIR = /home/hogehoge/${TARGET_SRC}
SRC_DIR = ${BASE_DIR}/src
GTEST_DIR = /usr/lib
UNIT_BIN_NAME = runTest
UNIT_BASE = ${UNIT_BIN_NAME}
UNIT_BUILD = ${UNIT_BASE}/build
UNIT_DOC = ${UNIT_BASE}/doc
UNIT_BIN = ${UNIT_BASE}/bin
# テストソース
TEST_OBJS = ${UNIT_BUILD}/TEST_${TARGET_SRC}.o
LIBS = ${GTEST_DIR}/libgtest.a
# 下の2行がキモでございます。
BUILD_OPTS = -O0 -g3 -Wall -fprofile-arcs -ftest-coverage
LINK_OPTS = -fprofile-arcs -ftest-coverage -lpthread
# 単体試験実施・レポート出力
all: test report
# レポートファイルの作成
report:
    @lcov -q -d ${UNIT_BUILD} --capture --output-file ${UNIT_BUILD}/lcov.info 2>/dev/null
    @lcov -q -r ${UNIT_BUILD}/lcov.info "c++*" --output-file ${UNIT_BUILD}/lcov2.info
    @lcov -q -r ${UNIT_BUILD}/lcov2.info "gtest*" --output-file ${UNIT_BUILD}/lcov3.info
    @lcov -q -r ${UNIT_BUILD}/lcov3.info "gmock*" --output-file ${UNIT_BUILD}/lcov4.info
    @genhtml --output-director ${UNIT_DOC}/report ${UNIT_BUILD}/lcov4.info 2>&1 | grep -v Reading | grep -v Found | grep -v Writing | grep -v Generating | grep -v Processing
    @cd ${UNIT_BASE} ; tar zcf doc.tgz doc ;
# 単体試験実施
test: init build
    @${UNIT_BIN}/${UNIT_BIN_NAME} --gtest_output=xml:${UNIT_DOC}/${TARGET_SRC}.xml
# コンパイルの実施
build: ${TEST_OBJS}
    @g++ -o ${UNIT_BIN}/${UNIT_BIN_NAME} ${TEST_OBJS} ${LIBS} ${LINK_OPTS}
# コンパイルルール
${UNIT_BUILD}/%.o: ${SRC_DIR}/%.cpp
    @g++ ${BUILD_OPTS} -c -o"$@" "$<"
# 初期化
init:
    @if [ ! -d ${UNIT_BASE} ] ;\
    then \
        mkdir ${UNIT_BASE} ; \
        mkdir ${UNIT_BIN}; \
        mkdir ${UNIT_BUILD} ; \
        mkdir ${UNIT_DOC} ; \
    else \
        rm -f ${UNIT_BUILD}/* ; \
    fi
# クリア
clean:
    @rm -rf ${UNIT_BASE}

テストしたい関数君だす。
与えられた数値の2乗を返す、ショボイ君だす。
static int sample1( int val )
{
    return val * val;
}

最後に、関数君を叩くテストソース君だす。
# C をテストしたい場合、
# こんな感じで「extern」する。
# C ファイル自体をincludeするのは
# お行儀が悪いが、これだとstatic関数も
# 問題ないので、おいらはこれで行くのだす!
extern "C"
{
    #include "sample1.c"
}
#include <gtest/gtest.h>
int Case1(void)
{
    return sample1(1);
}
int Case2(void)
{
    return sample1(2);
}
int Case3(void)
{
    return sample1(3);
}
int Case4(void)
{
    return sample1(4);
}
int Case5(void)
{
    return sample1(5);
}
TEST(sample1, Case1)
{
    ASSERT_EQ(1, Case1());
}
TEST(sample1, Case2)
{
    ASSERT_EQ(4, Case2());
}
TEST(sample1, Case3)
{
    ASSERT_EQ(9, Case3());
}
TEST(sample1, Case4)
{
    ASSERT_EQ(16, Case4());
}
TEST(sample1, Case5)
{
    ASSERT_EQ(25, Case5());
}
int main(int argc, char **argv) {
    testing::InitGoogleTest(&argc, argv);
    return RUN_ALL_TESTS();
}

make がうまく行くと下図のようになります。
gtest1.jpg

このとき、runTest/doc/report の下に、カバレッジレポートが作成されてます。
gtest2.jpg


自分の覚書も兼ねてるので、ザーッと流して書きますた。
次回は、mock の使い方ということで、ではでは!


posted by NERDY at 14:39 | Comment(0) | 技術 | このブログの読者になる | 更新情報をチェックする

2015年03月09日

Google Test Install

どういう風の吹き回しか、Google Test さんをいじらねばならなくなりますた。
といった訳で、インストールを行います。
わたすの環境は、ubuntu の14.04 でございます。

まずは、必要なものをどばーっと、apt-get しましょうね。
$ sudo apt-get install g++
$ sudo apt-get install cmake
$ sudo apt-get install lcov
$ sudo apt-get install google-mock

お次は、make してごにょごにょしましょうね。
$ cd /usr/src/gmock
$ sudo cmake .
$ sudo make
$ sudo cp *.a /usr/lib
$ cd /usr/src/gmock/gtest
$ sudo cmake .
$ sudo make
$ sudo cp *.a /usr/lib
$ cd /usr/src/gmock/gtest/include
$ sudo cp -r gtest /usr/include

わたすの環境では、これでバッチリ動いてます。
この続きは、明日以降ということで。

本日は、この後、いろいろとあるもので...
posted by NERDY at 16:16 | Comment(0) | 技術 | このブログの読者になる | 更新情報をチェックする

2015年03月06日

USBがおかしい!

おはようございます。
わたくすですが、おもむろにUSBメモリーを使おうとしたのでございます。
ん?!
3.18MB、なにそれ???
16Gのはずなのにぃぃぃ。
何をどーしても認識がおかしいのでございます。
Google先生にお伺いしたところ、「SDフォーマッター」とかいうのを使えば良いとのこと。
SDカード用のツールみたいですが、USBでも使えますた。
ばっちり直りますた。

posted by NERDY at 10:12 | Comment(0) | 日記 | このブログの読者になる | 更新情報をチェックする
×

この広告は180日以上新しい記事の投稿がないブログに表示されております。