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

Как идет расчет лимитов в юнит-тесте?

Один чужой юнит-тест из серии "покрывает все, что есть в приложении" начал выпадать на SOQL лимитам (101).

причем там нет SOQL в циклах. просто много кода и в нем много SOQL.

посмотрел в дебаг-лог того ЮТ - там множество "сводок" по лимитам. Не пойму как там считается: один лимит на один тест-метод?

Один чужой  юнит-тест из серии "покрывает все, что есть в приложении" начал выпадать на SOQL лимитам (101).

причем там нет SOQL в циклах. просто много кода и в нем много SOQL.

посмотрел в дебаг-лог того ЮТ - там множество "сводок" по лимитам. Не пойму как там считается: один лимит на один тест-метод?

Den Brown
Один чужой юнит-тест из серии "покрывает все, что есть в приложении" начал выпадать на SOQL лимитам (101).

Ну что можно сказать? Явно писал человек далекий от Salesforce и который про лимиты если и знает то крайне отдаленно.
Здесь на форуме мы уже вроде обсуждали эту тему и вроде бы знаем что это плохо - пихать все в один тест метод.

Den Brown
Не пойму как там считается: один лимит на один тест-метод?

Да, на один метод один стандартный лимит (вернее 2: до и после test.startTest)

[quote="Den Brown"]Один чужой юнит-тест из серии "покрывает все, что есть в приложении" начал выпадать на SOQL лимитам (101).[/quote]
Ну что можно сказать? Явно писал человек далекий от Salesforce и который про лимиты если и знает то крайне отдаленно.
Здесь на форуме мы уже вроде обсуждали эту тему и вроде бы знаем что это плохо - пихать все в один тест метод.

[quote="Den Brown"]Не пойму как там считается: один лимит на один тест-метод?[/quote]
Да, на один метод один стандартный лимит (вернее 2: до и после test.startTest)


@isTest
private class TEST_Package {
public static OrgSrc__c prepareData() {
}
static testMethod void TestClasses() {
OrgSrc__c O = prepareData();
test.startTest();
// Run tests from another class or methods
test.stopTest();
}
}

Чем хорош этот метод.
- Вы не зависите от настроек тестов (Параллельное последовательное выполнение).Это бывает очень важно при установке пакета у клиента.
- Используете централизованный метод для создания даты.
- Отдельные тесты можете выновить в отдельные классы как и раньше

[code]@isTest
private class TEST_Package {
	public static OrgSrc__c prepareData() {
	}
	static testMethod void TestClasses() {
		OrgSrc__c O = prepareData();
		test.startTest();
		// Run tests from another class or methods
		test.stopTest();
	}
}
[/code]

Чем хорош этот метод. 
 - Вы не зависите от настроек тестов (Параллельное последовательное выполнение).Это бывает очень важно при установке пакета у клиента.
 - Используете централизованный метод для создания даты.
 - Отдельные тесты можете выновить в отдельные классы как и раньше

Хм. Интересный пример. А чем он отличается от того что мы тупо соберем код со всех "tests from another class or methods" в один и влетим в лимиты?

Хм. Интересный пример. А чем он отличается от того что мы тупо соберем код со всех "tests from another class or methods" в один и влетим в лимиты?

Dmitry Shnyrev
вернее 2: до и после test.startTest

ага, значит у "подготовительной" фазы есть отдельный лимит (а не то, что лимит есть только на тестовую фазу). good to know.

wilder
// Run tests from another class or methods

т.е. просто вызвать статический другой тест-метод(ы) внутри данного тест-метода? и у каждого будет свой лимит? на "фасад" похоже...

[quote="Dmitry Shnyrev"]вернее 2: до и после test.startTest[/quote]

ага, значит у "подготовительной" фазы есть отдельный лимит (а не то, что лимит есть только на тестовую фазу). good to know.



[quote="wilder"]// Run tests from another class or methods[/quote]

т.е. просто вызвать статический другой тест-метод(ы) внутри данного тест-метода? и у каждого будет свой лимит? на "фасад" похоже...


Den Brown
Dmitry Shnyrev
вернее 2: до и после test.startTest

ага, значит у "подготовительной" фазы есть отдельный лимит (а не то, что лимит есть только на тестовую фазу). good to know.

wilder
// Run tests from another class or methods

т.е. просто вызвать статический другой тест-метод(ы) внутри данного тест-метода? и у каждого будет свой лимит? на "фасад" похоже...

Так точно, именно фасад.

[quote="Den Brown"][quote="Dmitry Shnyrev"]вернее 2: до и после test.startTest[/quote]

ага, значит у "подготовительной" фазы есть отдельный лимит (а не то, что лимит есть только на тестовую фазу). good to know.



[quote="wilder"]// Run tests from another class or methods[/quote]

т.е. просто вызвать статический другой тест-метод(ы) внутри данного тест-метода? и у каждого будет свой лимит? на "фасад" похоже...[/quote]

Так точно, именно фасад.

wilder
// Run tests from another class or methods

так, так. А вот эти стат методы, что вызываются тут, они помечены как testMethod ? а их класс @isTest?

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

[quote="wilder"]// Run tests from another class or methods[/quote]

так, так. А вот эти стат методы, что вызываются тут, они помечены как  testMethod ? а их класс @isTest?

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

Den Brown
и если так, то получается, что когда Прод прогоняет все тесты, то сначала прогонит эти методы внутри нашего "фасадного" юнит-теста, а потом еще раз прогонит их самих по себе? в чем смысл?

Именно так. Никакого, кроме удобства запуска отдельно.

А еще вот на этот важный вопрос ты узнал ответ?

Den Brown
т.е. просто вызвать статический другой тест-метод(ы) внутри данного тест-метода? и у каждого будет свой лимит?

[quote="Den Brown"]и если так, то получается, что когда Прод прогоняет все тесты, то сначала прогонит эти методы внутри нашего "фасадного" юнит-теста, а потом еще раз прогонит их самих по себе? в чем смысл?[/quote]
Именно так. Никакого, кроме удобства запуска отдельно.

А еще вот на этот важный вопрос ты узнал ответ?
[quote="Den Brown"]т.е. просто вызвать статический другой тест-метод(ы) внутри данного тест-метода? и у каждого будет свой лимит?[/quote]

У каждого тест метода свои лимиты. Поэтому я группирую триггеры, батчи ит ак далее в разные тестметоды.

У каждого тест метода свои лимиты. Поэтому я группирую триггеры, батчи ит ак далее в разные тестметоды.

wilder
Поэтому я группирую триггеры, батчи ит ак далее в разные тестметоды.

получается, что такой "фасадный" ЮТ делается только для удобства разработчика?

[quote="wilder"] Поэтому я группирую триггеры, батчи ит ак далее в разные тестметоды.[/quote]

получается, что такой "фасадный" ЮТ делается только для удобства разработчика?


Den Brown
wilder
Поэтому я группирую триггеры, батчи ит ак далее в разные тестметоды.

получается, что такой "фасадный" ЮТ делается только для удобства разработчика?

Не только. так же он позволяет исключить падения тестов по причине параллельного запуска.

[quote="Den Brown"][quote="wilder"] Поэтому я группирую триггеры, батчи ит ак далее в разные тестметоды.[/quote]

получается, что такой "фасадный" ЮТ делается только для удобства разработчика?[/quote]

Не только. так же он позволяет исключить падения тестов по причине параллельного запуска.

wilder
Не только. так же он позволяет исключить падения тестов по причине параллельного запуска.

Чего-то нифига не понятно.
Вот давай на пальцах.

есть 3 тест метода и еще один (четвертый), который запускает внутри себя тесты по твоему способу.
Я делаю Run All Tests. И что я вижу? Запускаются 4 метода параллельно, причем 4 метод запускает остальные 3 метода еще раз повторно но уже последовательно. Смысл? Если и так все свалится еще до запуска 4 метода?

А для того чтобы исключить падение тестов при параллельном запуске - у меня такое очень часто происходит - достаточно просто отключить на орге параллельный запуск тестов. По крайней мере мне всегда помогает.

[quote="wilder"]Не только. так же он позволяет исключить падения тестов по причине параллельного запуска.[/quote]
Чего-то нифига не понятно.
Вот давай на пальцах.

есть 3 тест метода и еще один (четвертый), который запускает внутри себя тесты по твоему способу.
Я делаю Run All Tests. И что я вижу? Запускаются 4 метода параллельно, причем 4 метод запускает остальные 3 метода еще раз повторно но уже последовательно. Смысл? Если и так все свалится еще до запуска 4 метода?

А для того чтобы исключить падение тестов при параллельном запуске - у меня такое очень часто происходит - достаточно просто отключить на орге параллельный запуск тестов. По крайней мере мне всегда помогает.

Dmitry Shnyrev
падение тестов при параллельном запуске

это еще что за? по какой причине они могут упасть при паралельном пуске?

[quote="Dmitry Shnyrev"]падение тестов при параллельном запуске[/quote]

это еще что за? по какой причине они могут упасть при паралельном пуске?

Например я в каждом тест методе привык копипастом создавать пользователя, под которым запускаются тесты.
Вроде ничего криминального. Но если на орге включено параллельное выполнение тестов у меня часто выскакивает ошибка что пользователь с таким username уже существует. Звучит как бред и по идее каждый тест метод должен запускаться с своем независимом тестовом окружении, но собственно такое имеет место происходить. Решается простым отключением параллельного запуска тестов.

У кого какие еще примеры проблем с параллельным выполнением тестов?

Например я в каждом тест методе привык копипастом создавать пользователя, под которым запускаются тесты.
Вроде ничего криминального. Но если на орге включено параллельное выполнение тестов у меня часто выскакивает ошибка что пользователь с таким username уже существует. Звучит как бред и по идее каждый тест метод должен запускаться с своем независимом тестовом окружении, но собственно такое имеет место происходить. Решается простым отключением параллельного запуска тестов.

У кого какие еще примеры проблем с параллельным выполнением тестов?

Dmitry Shnyrev
ошибка что пользователь с таким username уже существует.

точно такое было в проде, а я не понял в чем дело!

[quote="Dmitry Shnyrev"]ошибка что пользователь с таким username уже существует.[/quote] 
точно такое было в проде, а я не понял в чем дело!

Ок. объясняю на пальцах.

Бывают случаи когда вы не можете контроллировать эту самую галочку в настройках запуска тестов. Поэтому и делается фасад через который и запускаются все тесты.

А даже если вы и можете контроллировать эту настройку, то по моему мнению лучше все равно использлвать фасад, так как вы можете легко контроллировать процесс запуска тестов.

Ок. объясняю на пальцах. 

Бывают случаи когда вы не можете контроллировать эту самую галочку в настройках запуска тестов. Поэтому и делается фасад через который и запускаются все тесты.

А даже если вы и можете контроллировать эту настройку, то по моему мнению лучше все равно использлвать фасад, так как вы можете легко контроллировать процесс запуска тестов.