ArduinoUnitユニット テスト ライブラリでは、TestSuite に名前を付けるメカニズムを提供しました。ライブラリのユーザーは、次のように記述できます。
TestSuite suite("my test suite");
// ...
suite.run(); // Suite name is used here
これは想定される使用方法です。TestSuite の名前は文字列リテラルです。ただし、見つけにくいバグを防ぐために、次のようなさまざまな用途に対応する必要があると感じています。
char* name = (char*) malloc(14);
strcpy(name, "my test suite");
TestSuite suite(name);
free(name);
// ...
suite.run(); // Suite name is used here
そのため、次のように TestSuite を実装しました。
class TestSuite {
public:
TestSuite(const char* name) {
name_ = (char*) malloc(strlen(name) + 1);
strcpy(name_, name);
}
~TestSuite() {
free(name_);
}
private:
char* name_;
};
コンストラクターでのメモリ割り当てエラーの処理に失敗するという問題はさておき、次のようにポインターをメンバー変数に単純に割り当てることをお勧めします。
class TestSuite {
public:
TestSuite(const char* name) : name_(name) {
}
private:
const char* name_;
};
動的メモリ割り当てを廃止できるように、インターフェイスを変更して「正しく」使用するようにする方法はありますか?