開発環境
- macOS Sierra - Apple (OS)
- Emacs (Text Editor)
- C (プログラミング言語)
- Unity (テストハーネス)
テスト駆動開発による組み込みプログラミング (James W. Grenning (著)、蛸島 昭之 (監修)、笹井 崇司(翻訳)、オライリージャパン)のI部(TDDを始めよう)、3章(Cモジュールにとりかかる)、3.10(練習問題)、1、3.を取り組んでみる。
1、3.
コード(Emacs)
Makefile
#Set this to @ to keep the makefile quiet SILENCE = @ #---- Outputs ----# COMPONENT_NAME = BookCode_Unity TARGET1 = test1 #--- Inputs ----# UNITY_HOME = $(HOME)/root/Unity CPP_PLATFORM = Gcc PROJECT_HOME_DIR = . PROJECT_TEST_DIR = unity UNITY_BUILD_HOME = $(UNITY_HOE)/extras/fixture/build UNITY_CFLAGS += -DUNITY_OUTPUT_CHAR=UnityOutputCharSpy_OutputChar UNITY_WARNINGFLAGS = -Wall -Werror -Wswitch-default #UNITY_WARNINGFLAGS += -Wshadow SRC_DIRS = \ $(PROJECT_HOME_DIR)/src TEST_SRC_DIRS = \ $(PROJECT_TEST_DIR)\ $(UNITY_HOME)/src\ $(UNITY_HOME)/extras/fixture/src\ $(UNITY_HOME)/extras/fixture/test\ TEST_SRC_FILES = \ $(SRC_DIRS)/*.c\ $(PROJECT_TEST_DIR)/*.c\ $(PROJECT_TEST_DIR)/CircularBuffer/*.c\ $(UNITY_HOME)/src/*.c\ $(UNITY_HOME)/extras/fixture/src/*.c\ $(UNITY_HOME)/extras/fixture/test/*.c MOCKS_SRC_DIRS = \ $(PROJECT_TEST_DIR)/mocks\ INCLUDE_DIRS =\ -I.\ -I./src\ -I$(UNITY_HOME)/src\ -I$(UNITY_HOME)/test\ -I$(UNITY_HOME)/extras/fixture/src\ -I$(UNITY_HOME)/extras/fixture/test\ -I$(PROJECT_HOME_DIR)/mocks\ # include $(UNITY_BUILD_HOME)/MakefileWorker.mk all: default default: $(CC) $(UNITY_CFLAGS) $(UNITY_WARNINGFLAGS) $(INCLUDE_DIRS) \ $(TEST_SRC_FILES) -o $(TARGET1) && ./$(TARGET1)
CircularBufferTest.c
#include "unity_fixture.h"
#include "CircularBuffer.h"
TEST_GROUP(CircularBuffer);
TEST_SETUP(CircularBuffer) {}
TEST_TEAR_DOWN(CircularBuffer) {}
TEST(CircularBuffer, CircularBufferCreate) {
size_t len = 128;
CircularBuffer cb = CircularBufferCreate(len);
TEST_ASSERT_EQUAL_INT(0, cb.first);
TEST_ASSERT_EQUAL_INT(0, cb.last);
}
TEST_GROUP_RUNNER(CircularBuffer) {
RUN_TEST_CASE(CircularBuffer, CircularBufferCreate);
}
CircularBuffer.h
#pragma once
/** \file */
#include <stdlib.h> // size_t
typedef struct CircularBuffer {
size_t len;
char *buf;
size_t first;
size_t last;
} CircularBuffer;
CircularBuffer CircularBufferCreate(size_t len);
CircularBuffer.c
/** \file */
#include "CircularBuffer.h"
CircularBuffer CircularBufferCreate(size_t len) {
char *buf = malloc(sizeof(char) * len);
return (CircularBuffer){.len = len, .buf = buf, .first = 0, .last=0};
}
入出力結果(Terminal)
$ make -s
unity/CircularBuffer/CircularBufferTest.c:12:3: error: use of undeclared
identifier 'CircularBuffer'
CircularBuffer cb = CircularBufferCreate(len);
^
unity/CircularBuffer/CircularBufferTest.c:13:28: error: use of undeclared
identifier 'cb'
TEST_ASSERT_EQUAL_INT(0, cb.first);
^
unity/CircularBuffer/CircularBufferTest.c:14:28: error: use of undeclared
identifier 'cb'
TEST_ASSERT_EQUAL_INT(0, cb.last);
^
3 errors generated.
make: *** [default] Error 1
$ make -s
Undefined symbols for architecture x86_64:
"_CircularBufferCreate", referenced from:
_TEST_CircularBuffer_CircularBufferCreate_ in CircularBufferTest-695a18.o
(maybe you meant: _TEST_CircularBuffer_CircularBufferCreate_run, _TEST_CircularBuffer_CircularBufferCreate_ )
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [default] Error 1
$ make -s
Unity test run 1 of 1
.
-----------------------
1 Tests 0 Failures 0 Ignored
OK
$
0 コメント:
コメントを投稿