ファイルとディレクトリの配置構造

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>

開発を進めつつ、時々テストコードを実行して互換性が維持できているかを確認する。この部分を充実させておくことで、将来、楽になれる。実際に使っていて問題が見つかった場合は、それもテストコードとして作成して追加することで、将来のエンバグを減らす可能性を高めることができる。

テストフレームワークへ

このようにテストコードが増えていくと、いくつもの共通点が出てきて、整理していくことでいずれフレームワークのような状態になっていく。自分でフレームワークとして整理してもよいし、そうなってきたら似たような既存のテストフレームワークを探して置き換えるのも手ではないかと思う。

最初からテスト系のフレームワークを使ってもよいのだが、シンプルなものであれば自分で用意すればよく、そのほうが場合によっては見通しがよく移植性も高くなる。フレームワークを自作してもよいだろう。いずれテストフレームワークも取り上げるつもりだ。