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

Встречайте @testSetup Annotation!

я что-то не помню этого Annotation,
вероятно что-то новое и выглядит полезным:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_annotation_testsetup.htm

я что-то не помню этого Annotation, 
вероятно что-то новое и выглядит полезным:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_annotation_testsetup.htm

Появилось пару релизов назад.
Действительно хорошая штука. На глаз - тесты работают быстрей. Не замерял.
Единственно, что не удобно (лично мне) - это все созданное в testSetup методе должно быть вычитанно в тесте, т.е. прийдется потратить SOQL.

Появилось пару релизов назад.
Действительно хорошая штука. На глаз - тесты работают быстрей. Не замерял.
Единственно, что не удобно (лично мне) - это все созданное в testSetup методе должно быть вычитанно в тесте, т.е. прийдется потратить SOQL.

Не нашел этому достойного применения.
Все что мне хватает выше крыши
RunAs
Test.startTest
Test.endTest

Не нашел этому достойного применения. 
Все что мне хватает выше крыши
RunAs
Test.startTest
Test.endTest 
:D

Den Brown
я что-то не помню этого Annotation,
вероятно что-то новое и выглядит полезным:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_annotation_testsetup.htm

О_о, думал что уже очень давно появилось, как только начал работать с SF - сразу стал использовать.

Dmitry Shnyrev
Не нашел этому достойного применения.
Все что мне хватает выше крыши
RunAs
Test.startTest
Test.endTest

Using test setup

1. Значительно удобнее для нескольких тестов не insert'ить записи в каждом методе отдельно, а держать весь код в одном методе с testsetup. Раньше многие хорошие разработчики выносили это все в отдельный метод, либо писали свои генераторы тестовых данных. Но, как показывает код нескольких проектов, самым любимым делом является просто копировать код из метода в метод. Т.е. написал класс, написал тест с 5-6 методами, создал портянку на 100 строк для создания тестовых данных и в каждый из тестовых методов запихиваешь эту портянку.
2. Но самая основная фишка - salesforce вызывает testSetup один раз, перед исполнением первого testmethod1, а перед исполнением второго testmethod2 просто отказывает все изменения, сделанные testmethod1. Т.е. если у вас создание тестовых данных занимает ~10 секунд, то при выполнении 6 testmethod у вас 60 секунд потратится только на создание данных + время на тестирование. С использованием @testsetup у вас потратится 10 секунд на создание тестовых данных + доли секунды на откат.

Короче best practice.

[quote="Den Brown"]я что-то не помню этого Annotation, 
вероятно что-то новое и выглядит полезным:
https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_classes_annotation_testsetup.htm[/quote]

О_о, думал что уже очень давно появилось, как только начал работать с SF - сразу стал использовать.

[quote="Dmitry Shnyrev"]Не нашел этому достойного применения. 
Все что мне хватает выше крыши 
RunAs 
Test.startTest 
Test.endTest [/quote]

[url=https://developer.salesforce.com/docs/atlas.en-us.apexcode.meta/apexcode/apex_testing_testsetup_using.htm]Using test setup[/url]

1. Значительно удобнее для нескольких тестов не insert'ить записи в каждом методе отдельно, а держать весь код в одном методе с testsetup. Раньше многие хорошие разработчики выносили это все в отдельный метод, либо писали свои генераторы тестовых данных. Но, как показывает код нескольких проектов, самым любимым делом является просто копировать код из метода в метод. Т.е. написал класс, написал тест с 5-6 методами, создал портянку на 100 строк для создания тестовых данных и в каждый из тестовых методов запихиваешь эту портянку.
2. Но самая основная фишка - salesforce вызывает testSetup один раз, перед исполнением первого testmethod1, а перед исполнением второго testmethod2 просто отказывает все изменения, сделанные testmethod1. Т.е. если у вас создание тестовых данных занимает ~10 секунд, то при выполнении 6 testmethod у вас 60 секунд потратится только на создание данных + время на тестирование. С использованием @testsetup у вас потратится 10 секунд на создание тестовых данных + доли секунды на откат.

Короче best practice.

EvAzi
Короче best practice.

а как насчет лимитов? вызов @testSetup метода получает отдельные лимиты?

[quote="EvAzi"]Короче best practice.[/quote]

а как насчет лимитов? вызов @testSetup метода получает отдельные лимиты?

Нет, лимиты считаются вместе с @testSetup. Т.е. если ты в testSetup потратил 40 SOQL queries, то в начале каждого из тестовых методов у тебя Limits.getQueries() = 40, т.е. то что ты 40 SOQL queries потратил.

Нет, лимиты считаются вместе с @testSetup. Т.е. если ты в testSetup потратил 40 SOQL queries, то в начале каждого из тестовых методов у тебя Limits.getQueries() = 40, т.е. то что ты 40 SOQL queries потратил.

EvAzi
Нет, лимиты считаются вместе с @testSetup. Т.е. если ты в testSetup потратил 40 SOQL queries, то в начале каждого из тестовых методов у тебя Limits.getQueries() = 40, т.е. то что ты 40 SOQL queries потратил.

не, так не интересно. получается что единственное преимущество такого метода перед обычным методом дата-фабрики, это то что он быстрее "создает" данные при повторном вызове

[quote="EvAzi"]Нет, лимиты считаются вместе с @testSetup. Т.е. если ты в testSetup потратил 40 SOQL queries, то в начале каждого из тестовых методов у тебя Limits.getQueries() = 40, т.е. то что ты 40 SOQL queries потратил.[/quote]
не, так не интересно. получается что единственное преимущество такого метода перед обычным методом дата-фабрики, это то что он быстрее "создает" данные при повторном вызове

EvAzi
О_о, думал что уже очень давно появилось, как только начал работать с SF - сразу стал использовать.

если мне память не изменяет это было еще во втором издании advance apex книги, то есть очень старое, Никогда не использовал, но после этого поста походу буду использовать.

[quote="EvAzi"]О_о, думал что уже очень давно появилось, как только начал работать с SF - сразу стал использовать.[/quote]
если мне память не изменяет это было еще во втором издании advance apex книги, то есть очень старое, Никогда не использовал, но после этого поста походу буду использовать.