Unit test непонятное поведение при запуске под ant и из UI.

Unit test непонятное поведение при запуске под ant и из UI.

Привет всем.
Проблема в следующем. Один и тот же орг. Юниттест работает прекрасно в случае запуска его из конcоли или из UI. Сам класс теста не обновляется и в деплое не участвует. Однако сам деплой фейлится именно на юниттесте.Под деплоем подразумеватся выкладка меты на орг с помощью анта.

Никто, нигде, никак не натыкался? И как можно полечить проблему?

Зависимости участвующие в тесте могут обновляться.

Деплой антом происходит под тем же юзером что и запуск теста? Какая ошибка в тесте?

В деплое участвуют только два класса. Больше ничего. Юнит тест от них абсолютно не зависим. Он вообще проверяет совсем другой кусок. Я запускал тест под юзером деплоя - работает.

Тут хз, нужна ошибка теста, чтобы больше инфы для понимания, в чем проблема.

No such column 'BillingAddress' on entity 'Account'.
Поле есть и оно видимо. Ну и тест руками то проходит.

Разобрался - спасибо.
Коротко дело было в разных версиях АПИ под классы. Я думал в эту сторону, но совсем забыл, что под каждый класс идет своя версия.

Хочу апнуть тему.
Ситуация следующая.
Для деплоя есть два класса

ClassA - API version 29.
ClassB - API version 35.
package.xml - API version 38.

Версии классов прописаны в meta.xml.
Вопрос.
Почему при деплое используется нижняя версия АПИ из класса, а не берется из пакета?

Ну это как бы логично.
Если ты в классе указал что тебе нужна версия ниже, то она тебе реально нужна.
И соответственно чтобы обеспечить обратную совместимость используется самая "старая" версия которая тебе нужна исходя из твоих же установок.

Не вижу логики.
Первое, не я указал АПИ, которая мне нужна. Это версия АПИ, при которой был создан класс. Далее он не менялся.
Второе, совместимость на то и обратная, что новые версии могут все, что делали старые, но не наоборот.
Вот и получается, что новый класс использует новые возможности АПИ. Но, тесты стартуют со старой и фейлятся.

Ну да, перечитал и понял что про "обратную совместимость" затупил.

Вот в этом то и загадка. Какого деплоер использует низшую версию вместо заявленной.

Скорей всего ClassA вызывает ClassВ. Тогда версия ClassА будет использоваться для выполнения ClassВ. Кажется так по правилам СФ.

https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_version_settings_api.htm

Andrii Muzychuk
Скорей всего ClassA вызывает ClassВ. Тогда версия ClassА будет использоваться для выполнения ClassВ. Кажется так по правилам СФ.

ClassB вызывает ClassA. ClassC - это вообще левый юнит тест, который имеет АПИ версию 40 и тестирует совершенно другой функционал. Тест запускается при деплое в пачке с остальными тестами, и использует составное поле объекта, которое появилось в АПИ 30. Деплоится только ClassB. Для тестов, получается, используется версия ClassA, т.е. пониженная. Соответственно юнит тест фейлится.
Я допускаю, что для тестов ВЕЗДЕ используется наименьшая версия, использованных при деплое классов. Т.е. на версию, прописанную в package.xml salesforce просто ложит. Это баг или фича? Где найти информацию, подтверждающую или иную?
Зверек в общем.

Сорри за нубский вопрос.
А поменять версию в классе на высшую нельзя?
Насколько мне опыт подсказывает никто особо с версиями не заморачивается и они тупо висят там с того момента когда создавали класс. Особой несовместимости между версиями чтобы вообще звиздец был я не видел.
Всегда беру меняю без задней мысли. Ни разу с этим проблем не имел.

Dmitry Shnyrev
А поменять версию в классе на высшую нельзя?

Можно, конечно. Просто хочу разобраться почему так.

Интересная информация? Помогите сайту, разместите ссылку в социальных сетях..