Код: Выделить всё
#include
#include
class TracedName {
public:
TracedName(std::string name, std::string filename, int line):
m_name(std::move(name)), m_filename(std::move(filename)), m_lineNumber(line)
{
}
std::string_view operator()() const { return m_name; }
::testing::ScopedTrace trace() const
{
return {m_filename.c_str(), m_lineNumber, m_name.c_str()};
}
private:
std::string m_name;
std::string m_filename;
int m_lineNumber;
};
#define TRACED_NAME(name) TracedName(name, __FILE__, __LINE__)
struct TestInput {
std::string value;
};
struct TestCase {
TracedName name;
TestInput input;
bool expected;
};
class ParameterizedTestSuite : public ::testing::TestWithParam {};
TEST_P(ParameterizedTestSuite, Test) {
const auto& param = GetParam();
const auto trace = param.name.trace(); // Trying to get the trace to point to the test case
EXPECT_EQ(param.input.value == "valid", param.expected);
}
INSTANTIATE_TEST_SUITE_P(
MyTests,
ParameterizedTestSuite,
::testing::Values(
TestCase{
.name = TRACED_NAME("ValidInput"),
.input = {.value = "valid"},
.expected = true,
},
TestCase{
.name = TRACED_NAME("InvalidInput"), // I want error message to point to THIS line
.input = {.value = "invalid"},
.expected = true, // This will fail
}
)
);
Когда тест не сработает, я получаю выход с номерами строк, указывающим на то, где заканчивается indathiate_test_suite_p , а не на том, где провал тестовый пример. Определяется tred_name ("Invalidinput") , поэтому я могу быстро перейти к испытательному примеру с неудачным тестовым примером при рассмотрении вывода терминала. Возможно ли это вообще?>
Подробнее здесь: https://stackoverflow.com/questions/795 ... terized-te