ファイルとディレクトリの配置構造
CSVファイルをTSVに変換するだけのコマンドを作っているわけだが、テストスクリプトやテストデータも含めるとファイルやディレクトリの配置が少々複雑になってくる。現在は次のような状態になっている。
csv2tsv - ファイルとディレクトリの配置構造
C:.
│ LICENSE
│ main.c
│ main.h
│ Makefile
│ util_csv.c
│ util_file.c
│
├───.vscode
│ launch.json
│ tasks.json
│
├───data
│ doublequotes.csv
│ doublequotes.tsv
│ empty.csv
│ empty.tsv
│ spaces.csv
│ spaces.tsv
│ zip.csv
│ zip.tsv
│
└───tests
test.ps1
test001.ps1
test002.ps1
test003.ps1
test004.ps1
Makefileへのマージ
今回の書き換えをMakefileにも反映させると次のようになる。
今回の開発を反映させたMakefile
CMD= csv2tsv.exe
SRCS= $(wildcard *.c)
OBJS= $(SRCS:.c=.o)
CC= clang
CFLAGS+=-g
build: $(CMD)
$(CMD): $(OBJS)
$(CC) $(CFLAGS) -o $(CMD) $(OBJS)
.c.o:
$(CC) -c $< -o $@
test: $(CMD)
pwsh .\tests\test.ps1
clean:
rm -f *.exe
rm -f *.o
rm -f *.ilk
rm -f *.pdb
「make test」と実行すると次のような結果を得ることができる。
テストコードの実行
PS C:\Users\daichi\Documents\vscode-csv2tsv> make test
clang -c main.c -o main.o
clang -c util_csv.c -o util_csv.o
clang -c util_file.c -o util_file.o
clang -g -o csv2tsv.exe main.o util_csv.o util_file.o
pwsh .\tests\test.ps1
テスト001: 成功
テスト002: 成功
テスト003: 成功
テスト004: 成功
全テストをパス
PS C:\Users\daichi\Documents\vscode-csv2tsv>
開発を進めつつ、時々テストコードを実行して互換性が維持できているかを確認する。この部分を充実させておくことで、将来、楽になれる。実際に使っていて問題が見つかった場合は、それもテストコードとして作成して追加することで、将来のエンバグを減らす可能性を高めることができる。
テストフレームワークへ
このようにテストコードが増えていくと、いくつもの共通点が出てきて、整理していくことでいずれフレームワークのような状態になっていく。自分でフレームワークとして整理してもよいし、そうなってきたら似たような既存のテストフレームワークを探して置き換えるのも手ではないかと思う。
最初からテスト系のフレームワークを使ってもよいのだが、シンプルなものであれば自分で用意すればよく、そのほうが場合によっては見通しがよく移植性も高くなる。フレームワークを自作してもよいだろう。いずれテストフレームワークも取り上げるつもりだ。