私は初心者なので、これが素朴に聞こえる場合はご容赦ください。fastcgi++ でスクリプトを書きました。そして、基本的な使用例をテストしました。しかし、優れたソフトウェア エンジニアのように、変更を加えるたびにスクリプトをテストして、問題が発生しないようにしたいと考えています。
これは私がよくやっていたことです:
これは私のディレクトリ構造でした:
script:
- bin
- build (contained the bash script to compile the script)
- src
- tests
- build (contained bash script to compile the test)
- src (contained the test file)
- output
テストした方法でハッキングしました。以前はcurlを使用してスクリプトを呼び出し、その出力をtests/outputのファイルにリダイレクトし(相対パスを使用)、予想される出力と比較していました。テストは手動でコンパイルされ、ディレクトリを に変更した後にのみテストを実行したため、これを行うことができましたtests/build
。最近、ビルドシステムを使用することにしました。私はメゾンを選びました。meson を使用してテストする方法は、meson test
orを実行することninja test
です。問題は、テストが実行される場所を制御できないことです。
そのような状況でどのようにテストするのですか?また、fcgi スクリプトをどのようにテストしますか?
編集:これは、私がコンパイルしてテストした方法の例です。これは完全に検証可能な例です:
#include <fastcgi++/request.hpp>
#include <fastcgi++/manager.hpp>
class test : public Fastcgipp::Request<char>
{
bool response() {
nlohmann::json output;
out << "Content-Type: application/json; charset:utf-8\r\n\r\n";
out << "{\"success\": true}";
}
}
int main() {
Fastcgipp::Manager<test> manager;
manager.setupSignals();
manager.listen();
manager.start();
manager.join();
}
レスポンスがメインと考えてよいでしょう。ここから処理を開始します。入力と出力など、すべての優れた機能を利用できます。
これは私がテストしている方法です:
TEST(test, test1) {
std::string fileName = "test.txt";
nlohmann::json input, output;
input["success"] = true;
std::system(std::string("curl -X GET \"localhost/cgi-bin/test.fcg\" > " + fileName).c_str());
std::ifstream file(fileName);
std::string out;
std::getline(file, out);
output = nlohmann::json::parse(out);
ASSERT_EQ(input, output);
std::system(std::string("rm " + fileName).c_str());
}
注: nlohmann::json は json パーサーであり、テストで Google テストを使用しています