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/build. 我最近决定使用构建系统。我选择了介子。使用介子进行测试的方式是运行meson testninja 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 test

4

1 回答 1

1

现在的问题是我无法控制从哪里运行测试。

默认情况下,测试在构建目录中运行,但有参数workdir(请参阅参考资料)可用于设置将用作测试工作目录的绝对路径,例如:

exe = executable(...)
wdir = join_paths(meson.current_source_dir(), 'some_dir')
test('basic', exe, workdir : wdir)

检查介子对象是否有其他可能的参考目录。

于 2019-09-27T20:40:56.190 回答