Я новичок, так что простите меня, если это звучит наивно. Написал скрипт на 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 test
или 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.