Actuellement, je le fais de cette façon (pseudocode):Comment tester les flux client-serveur avec boost :: Test
#include <boost/test/unit_test.hpp>
#include <string>
bool testingClient = true;
BOOST_AUTO_TEST_SUITE(ProtocolSchema)
BOOST_AUTO_TEST_CASE(server)
{
testingClient = false;
// start server listener
FILE *client_stdout = popen((argv[0] + std::string(" --run_test=ProtocolSchema/client 2>&1")).c_str(), "r");
for (1000ms)
{
// listen for ping, reply with a pong
}
pclose(fl);
}
BOOST_AUTO_TEST_CASE(client)
{
if (!testingClient)
return;
// send ping to the server
// check that it replies with a pong
}
}
L'idée est claire: boost::test
tests runs de manière séquentielle, une fois qu'il essaie d'exécuter serveur, le test de l'unité du serveur retourne testingClient
de cette façon le prochain test ne fait tout simplement rien et se termine. Le test du serveur démarre le même exécutable de test avec le paramètre run_test
défini pour exécuter le test client uniquement. Dans le deuxième processus testingClient
drapeau n'est pas retourné, cela le fait réellement exécuter le test client.
Existe-t-il un moyen approprié de faire ce genre de test unitaires client-serveur avec boost :: test? Dans mon cas, tous les journaux de test du processus client sont en quelque sorte perdus: il faudrait que je les fread from client_stdout et que j'écrive tout cela dans BOOST_MESSAGE?
on dirait que vous pouvez certainement utiliser [appareils] (http://www.boost.org/doc/libs/1_63_0/libs/test/doc/html/ boost_test/tests_organization/fixtures.html). –
Nous les utilisons, mais cela n'aidera pas dans mon cas. Il n'a pas de relation avec le démarrage de processus séparés (je ne peux pas les exécuter dans le même processus) – Pavel