0

私は初心者なので、これが素朴に聞こえる場合はご容赦ください。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 testorを実行すること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 テストを使用しています

4

1 に答える 1