Я оцениваю 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.