Почему Typemock ASSERT_WAS_CALLED не может передать правильный параметр в метод IS? - PullRequest
0 голосов
/ 01 апреля 2020

Я оцениваю Typemock Isolator ++ для модульного тестирования и столкнулся с проблемой, которую, похоже, не могу понять. Я сузил проблему и изолировал ее для этой программы:

TEST_F(test123, test2) {
Person person;
Address pAddress;

auto l = [](const string& str) {
    if (str.empty()) {
        printf("String is empty!\n");
    }
    else {
        printf("STRING: %s\n", str.c_str());
    }
    return !str.compare("UK");
};

WHEN_CALLED(pAddress.SetCountry(IS<string>(l))).Ignore();

printf("Calling...\n");
person.SetAddressCountry(&pAddress, "UK");
printf("Called\n");

ASSERT_WAS_CALLED(pAddress.SetCountry(IS<string>(l)));
}

Проблема в том, что макрос ASSERT_WAS_CALLED, по-видимому, неправильно передает строку «UK» в лямбду, определенную в функции «IS» , Когда я запускаю это через googletest, я получаю вывод:

[ RUN      ] test123.test2
Calling...
STRING: UK
Called
String is empty!

********* Typemock Isolator++ Assert Exception *********
 - The function 'pAddress.SetCountry(IS<string>(l))' was NOT called
unknown file: error: C++ exception with description "The function 'pAddress.SetCountry(IS<string>(l))' was NOT called" thrown in the test body.
[  FAILED  ] test123.test2 (101 ms)

Я не уверен, что это полностью проблема Isolator ++ (этот код, который я разместил, является адаптированной версией созданного ими примера, поэтому я ожидал, что это сработает) но я не уверен, что еще это может быть. Широко используется встроенная сборка, но я использую те же флаги компилятора, что и их решения VS. Я использую компилятор MSV C C ++. Windows комплект 8.1, VS2017 v141. Это происходит как на x86, так и на x64.

...