Googletest (gtest) / googlemock (gmock): почему поведение "interleav [ing]` EXPECT_CALL () `и вызовов фиктивных функций" не определено? - PullRequest
0 голосов
/ 30 апреля 2020

Несмотря на написание

... Я до сих пор не знаю, почему Google говорит, что это неопределенное поведение:

... в противном случае поведение не определено. В частности, вы не должны чередовать EXPECT_CALL () и вызовы фиктивных функций "(https://github.com/google/googletest/blob/master/googlemock/docs/for_dummies.md#using -mocks-in-tests )

Они просто закрывают мой вопрос выше, повторение этого было фактически неопределенным поведением, но без объяснения причин.

Может кто-нибудь объяснить детали, почему и как это неопределенное поведение?

1 Ответ

0 голосов
/ 30 апреля 2020

Неопределенное поведение (UB) в целом не означает, что оно не работает. Это означает, что нет никаких гарантий, что это будет работать.

Еще один способ выразить это в том, что это скорее контракт между автором библиотеки и пользователем, чем описание того, что делает библиотека.

Все, что UB означает здесь, в основном "не полагайтесь на это работает ". Если это так, то считайте себя счастливчиком, но не ожидайте, что он продолжит работать, когда что-то еще изменится.

По сути:

Я до сих пор не знаю, почему Google говорит, что это неопределенное поведение

Им не нужно мотивировать это решение, поскольку это всего лишь часть дизайна API.

Теперь, если вопрос «Почему Google выбрать, чтобы сделать это неопределенное поведение? Тогда это другое дело.

Обрамленный таким образом, ответ также может быть следующим: «Предоставление гарантии того, что это будет работать в КАЖДОМ сценарии использования, является слишком большим усилием для недостаточного усиления, поэтому мы не будем его выполнять»

...