4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

Code Composer StudioでCppUTestを試す

Last updated at Posted at 2013-10-09

追記:2013年11月7日:スタックとヒープの設定を追記した。少なすぎると実機で動作しない。

CppUTestを使ってみる

テストフレームワークの一つであるCppUTestを実機で動作させてみる。
ターゲットはTI社製Cortex-M4を搭載したStellaris Launchpad LM4F120(¥550で売ってたヤツ)で、開発環境はTI社謹製のCode Composer Studio v5(以下、CCS)でやってみる。
CCSを起動し、Workspaceに適当な名前(ここではworkspace_LM4F120_CppUTestとした)を入れてOKを押下。
image001.png

ライブラリの生成

プロジェクトの作成

まず、CppUTestライブラリを生成するプロジェクトを作成する。
File => New => CCS Projectで新規プロジェクトを作成する。

Description comment
Project name 何でもいいと思うがここではCppUTestとした
Output type ライブラリ形式なのでStatic Libraryを選択
Use default location 今回はソースコードを分離しないのでチェックしたまま
Variant 左に120hと入力で絞り込みでき、LM4F120H5QRを選択
Project templates Empty Projectを選択

入力が完了したらFinishを押下。
image003.png

UppUTestのインポート

プロジェクトを右クリック(もしくはプロジェクトを選んでFileメニュー)からImportでImportダイアログを開く。General⇒File Systemを選んでNextをクリック。Browseを押下してCppUTestディレクトリを指定してOKを押下。
image005.png
次のようにインポートするインクルードファイルとソースファイルを指定する。PlatformsはインクルードではGcc、ソースファイルではIarを選ぶ。なお、ソースファイルに含まれる拡張子dspのような不要なファイルは組み込まない。Finishをクリックしてインポートを実行する。
image007.png
インポート後のプロジェクトは次のようになる。
image009.png

プロジェクトの設定

まずインクルードディレクトリを指定する。プロジェクトを右クリック(もしくはプロジェクトを選択してFileメニュー)からPropertiesを選択し、プロパティダイアログを表示する。左のツリービューからBuild⇒ARM Compiler⇒Include Optionsを選択し、右下のディレクトリサーチ追加ペインにあるAddボタンをクリックし、Workspaceボタンから参照して次のようにプロジェクト内のインクルードパスを指定する。
image011.png
OKを押下すると次のようなディレクトリ指定となるので更にOKを押下する。
image013.png
ディレクトリパスに追加されていることを確認する。
image015.png
続けてシンボル定義をしておく。同じプロパティダイアログのツリービューからBuild⇒ARM Compiler⇒Advanced Options⇒Predefined Symbolsを選択し、右上のPre-define NAMEペインのAddボタンをクリックし、次のようにシンボル「_LIB」を定義する。
image017.png
追加されていることを確認する。
image019.png
最後に言語オプションで例外ハンドリングを有効にする。同じプロパティダイアログのツリービューからBuild⇒ARM Compiler⇒Advanced Options⇒Language Optionsを選択し、Enable C++ exception handling(--exceptions)にチェックを入れ、OKボタンをクリックする。
image021.png
開発環境の違いによりtolower()関数が定義されているヘッダファイルが異なっているので、プロジェクトのsrc/Platforms/Iar/UtestPlatform.cppを開き、インクルードファイルにctype.hを追加する。

UtestPlatform.cpp
# include <ctype.h>

ビルド

ビルドを実行(別段の理由が無ければCtrl+Bでよい)し、ライブラリCppUTest.libが生成する。ライブラリファイルはDebug(設定によりRelease)以下に生成される。
image023.png

テストケースの実装

プロジェクトの作成

続いてテストケースを実装してみる。今回は簡単のため同じワークスペース上でテストケースを実装する。File => New => CCS Projectで新規プロジェクトを作成する。

Description comment
Project name 何でもいいと思うがここではLab2とした
Output type 実行形式なのでExecutableを選択
Use default location 今回はソースコードを分離しないのでチェックしたまま
Variant 左に120hと入力で絞り込みでき、LM4F120H5QRを選択
Connection Stellaris In-Circuit Debug Interfaceを選択
Project templates Empty Project (with main.c)を選択

入力が完了したらFinishを押下。
image025.png
CppUTestなので自動生成されたmain.cをmain.cppにリネームしておく。
image027.png

インクルードパスの指定

インクルードディレクトリの指定をライブラリの時とおなじ要領で設定する。同じワークスペース上にあるときはWorkspaceボタンを押下して次のように設定すれば良い。なお、ワークスペース内に無いときはFile Systemで指定する。
image029.png

ライブラリの指定

Build⇒ARM Linker⇒File Search Pathを選び右上のInclude library fileペインでAddボタンを押下し、CppUTest.libを指定する。なお、次画面は指定後の画面。
image031.png
Addボタンを押下するとAdd file pathダイアログが開くのでWorkspaceボタンを押下し、次のようにワークスペース内にある事前に作成したライブラリを指定する。
image033.png
確認してOKボタンを押下する。
image035.png

テストケースの実装

今回の例ではメイン関数にテストケースを直接コーディングして動作を確認する。

main.cpp
# include <CppUTest/CommandLineTestRunner.h>
# include <CppUTest/TestHarness.h>

/* … */

int main()
{
	/* … */
	static char *argv[] = { "main" };
	CommandLineTestRunner::RunAllTests(sizeof(argv)/sizeof(*argv), argv);
	/* … */
}

int hoge(void)
{
	return 3;
}

int hoge(int a)
{
	return a+1;
}

TEST_GROUP(TestSuiteHoge)
{};

TEST(TestSuiteHoge, TestCaseHoge)
{
	LONGS_EQUAL(3, hoge());
}

TEST(TestSuiteHoge, TestCaseHoge2)
{
	LONGS_EQUAL(3, hoge(2));
}

スタックとヒープの設定

CppUTestのテストを実行するには一定以上のスタックサイズとヒープサイズが必要になる。正確に見積もりしていないが、ここではスタックサイズ2KB、ヒープサイズ8KBを指定した。Build⇒ARM Linker⇒Basic Optionsを選び、Set C system stack sizeに2048、Heap Size for C/C++ dynamic memory allocationに8192を指定する。
image037.png

結果をコンソール出力

Debug ConfigurationsのMainタブにあるUse the same console for CIO all CPUsにチェックマークを入れておくと、CIOをコンソールに出力してくれる。
image039.png

実行結果

実行結果はこの通り。
image041.png

4
4
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
4

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?