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