Регистрация  |  Вход

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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



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

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

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

Скорей всего 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 просто ложит. Это баг или фича? Где найти информацию, подтверждающую или иную?
Зверек в общем.

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

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

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

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

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

[quote="Dmitry Shnyrev"]
А поменять версию в классе на высшую нельзя?
[/quote]
Можно, конечно. Просто хочу разобраться почему так.