我正在使用Catch framerwork为实现信号概念的类编写测试。我想测试插槽是否以正确的顺序调用,参数是否正确传递等等。我使用字符串(std::stringstream
来确切)以验证它。
#include "catch.hpp"
#include <nete/Signal.h>
#include <sstream>
std::stringstream ss;
void global_function1(int a, int b) {
ss << "global_function1 " << a << " " << b << " ";
}
void global_function2(int a, int b) {
ss << "global_function2 " << a << " " << b << " ";
}
TEST_CASE("Signal connect", "[signal]")
{
SECTION("global")
{
ss.clear(), ss.str("");
nete::Signal<void(int, int)> s;
s.connect<global_function1>();
s.connect<global_function2>();
s(123, 456);
s(234, 567);
std::string expected =
"global_function1 123 456 "
"global_function2 123 456 "
"global_function1 234 567 "
"global_function2 234 567 ";
REQUIRE(ss.str() == expected);
}
}
一方面,解决方案按预期工作,另一方面 - 感觉有点hacky。有什么警告我不知道吗?或者也许还有其他一些标准的方法来实现函数/方法实际调用正确的参数?