#c #tdd #trompeloeil
#c #tdd #trompeloeil
Вопрос:
Используя платформу модульного тестирования trompeloeil и TDD: https://github.com/rollbear/trompeloeil/blob/master/docs/reference.md
Учитывая следующие тестовые примеры
Testcase 1:
Expectation_A: a() is called
Expectation_B: b() is called
Testcase 2:
Expectation_A: a() is called
Expectation_C: c() is called
Их можно легко написать с помощью TDD:
WHEN("")
{
REQUIRE_CALL(*myMock, a());
AND_WHEN("")
{
REQUIRE_CALL(*myMock, b());
THEN("")
{
objectUnderTest.call();
}
}
AND_WHEN("")
{
REQUIRE_CALL(*myMock, c());
THEN("")
{
objectUnderTest.call();
}
}
}
Однако я не знаю, как справиться со случаем, когда последовательность ожиданий одинакова в обоих тестовых примерах, после того, как одно ожидание / параметризованная область была разной в обеих последовательностях:
Testcase 1:
Expectation_A: a() is called
Expectation_B: b() is called
Expectation_D1: d1() is called
Expectation_D2: d2() is called
Expectation_D3: d3() is called
Testcase 2:
Expectation_A: a() is called
Expectation_C: c() is called // differs
Expectation_D1: d1() is called // same as TC1 from here on
Expectation_D2: d2() is called
Expectation_D3: d3() is called
Единственный способ, которым я знаю, как написать их с помощью TDD, это:
WHEN("")
{
REQUIRE_CALL(*myMock, a());
AND_WHEN("")
{
REQUIRE_CALL(*myMock, b());
REQUIRE_CALL(*myMock, d1());
REQUIRE_CALL(*myMock, d2());
REQUIRE_CALL(*myMock, d3());
THEN("")
{
objectUnderTest.call();
}
}
AND_WHEN("")
{
REQUIRE_CALL(*myMock, c());
REQUIRE_CALL(*myMock, d1());
REQUIRE_CALL(*myMock, d2());
REQUIRE_CALL(*myMock, d3());
THEN("")
{
objectUnderTest.call();
}
}
}
Есть ли способ воссоединиться с потоком выполнения для тестовых наборов после того, как они отличались, или мне действительно нужно копировать и вставлять, как только 2 тестовых набора отличаются?