Контроллер на 800 строк прошел в ПРод вообще не покрытым тестом. Возможно ли такое?
Работаю с одним большим старым приложением.
нужно было апдатировать один контроллер на 800 строк.
так вот, перед сбором в Чендж сет, ищу тест, который его покрывает.
нахожу здоровучий тест, на весь код в этом Приложении, который имеет много тест методов, которые хорошо покрывают многие (вероятно почти все требуемые) классы. И тот тест имеет спец метод (он последний из них) которые покрывает мои контроллер. Только он не покрывает его вовсе. Не падает, но и не покрывает: контроллер вообще не вызывается.
Вопрос: как этот контроллер вообще попал в Прод (а он там есть и хорошо работает)?
У меня только один вариант: при отправке или деплойменте система проверяет общее покрытие на весь чендж сет. То есть так как прочие классы в пределах сета были покрыты почто на 99%, но непокрытые строки нашего контроллера отъели какие проценты от 99% покрытие, но в связи с тем что кода покрытого было много в целом, процентовка удержалась в пределах >75%... т.е. там нет проверки процентовки применительно к каждому отдельному классу...
Работаю с одним большим старым приложением.
нужно было апдатировать один контроллер на 800 строк.
так вот, перед сбором в Чендж сет, ищу тест, который его покрывает.
нахожу здоровучий тест, на весь код в этом Приложении, который имеет много тест методов, которые хорошо покрывают многие (вероятно почти все требуемые) классы. И тот тест имеет спец метод (он последний из них) которые покрывает мои контроллер. Только он не покрывает его вовсе. Не падает, но и не покрывает: контроллер вообще не вызывается.
Вопрос: как этот контроллер вообще попал в Прод (а он там есть и хорошо работает)?
У меня только один вариант: при отправке или деплойменте система проверяет общее покрытие на весь чендж сет. То есть так как прочие классы в пределах сета были покрыты почто на 99%, но непокрытые строки нашего контроллера отъели какие проценты от 99% покрытие, но в связи с тем что кода покрытого было много в целом, процентовка удержалась в пределах >75%... т.е. там нет проверки процентовки применительно к каждому отдельному классу...
такое возможно?
Все правильно определил. Если общее покрытие больше 75% нет никаких проблем.
[quote="Den Brown"]Работаю с одним большим старым приложением.
нужно было апдатировать один контроллер на 800 строк.
так вот, перед сбором в Чендж сет, ищу тест, который его покрывает.
нахожу здоровучий тест, на весь код в этом Приложении, который имеет много тест методов, которые хорошо покрывают многие (вероятно почти все требуемые) классы. И тот тест имеет спец метод (он последний из них) которые покрывает мои контроллер. Только он не покрывает его вовсе. Не падает, но и не покрывает: контроллер вообще не вызывается.
Вопрос: как этот контроллер вообще попал в Прод (а он там есть и хорошо работает)?
У меня только один вариант: при отправке или деплойменте система проверяет общее покрытие на весь чендж сет. То есть так как прочие классы в пределах сета были покрыты почто на 99%, но непокрытые строки нашего контроллера отъели какие проценты от 99% покрытие, но в связи с тем что кода покрытого было много в целом, процентовка удержалась в пределах >75%... т.е. там нет проверки процентовки применительно к каждому отдельному классу...
такое возможно?[/quote]
Все правильно определил. Если общее покрытие больше 75% нет никаких проблем.
ха-ха.
кстати заметил две странные вещи в чужом тесте:
1) для вставки Контакта нужно дать ему Аккаунт.
так вот поля Account нет на Контакте, а вставить в него Account-объект можно, и после вставляется и сам контакт.
зато есть поле AccountId. Но если в "поле" Account вставить Account-объект, то поле AccountId все-равно остается пустым...
2) есть чудо переменные THIS_FISCAL_YEAR, LAST_FISCAL_YEAR в SOQL
[quote="wilder"]Если общее покрытие больше 75% нет никаких проблем.[/quote]
ха-ха.
кстати заметил две странные вещи в чужом тесте:
1) для вставки Контакта нужно дать ему Аккаунт.
так вот поля [b]Account[/b] нет на Контакте, а вставить в него Account-объект можно, и после вставляется и сам контакт.
зато есть поле AccountId. Но если в "поле" Account вставить Account-объект, то поле AccountId все-равно остается пустым...
2) есть чудо переменные THIS_FISCAL_YEAR, LAST_FISCAL_YEAR в SOQL
1. AccountId - это непосредственно ИД аккаунта, а Account - это relationship. Если бы у тебя были кастомные поля то они были бы Account__c и Account__r соответственно.
[quote="Den Brown"][quote="wilder"]Если общее покрытие больше 75% нет никаких проблем.[/quote]
ха-ха.
кстати заметил две странные вещи в чужом тесте:
1) для вставки Контакта нужно дать ему Аккаунт.
так вот поля [b]Account[/b] нет на Контакте, а вставить в него Account-объект можно, и после вставляется и сам контакт.
зато есть поле AccountId. Но если в "поле" Account вставить Account-объект, то поле AccountId все-равно остается пустым...
2) есть чудо переменные THIS_FISCAL_YEAR, LAST_FISCAL_YEAR в SOQL[/quote]
1. AccountId - это непосредственно ИД аккаунта, а Account - это relationship. Если бы у тебя были кастомные поля то они были бы Account__c и Account__r соответственно.
2. там таких переменных много. [url=http://www.salesforce.com/us/developer/docs/officetoolkit/Content/sforce_api_calls_soql_select_dateformats.htm]Примеры[/url]
1. AccountId - это непосредственно ИД аккаунта, а Account - это relationship. Если бы у тебя были кастомные поля то они были бы Account__c и Account__r соответственно.
а что в CustomField__r можно вставить соответсвующий объект целиком по создании связанного объекта? я не знал
там таких переменных много.
этакие глобальные переменные для SOQL, но все связанные со временем
[quote="wilder"]
1. AccountId - это непосредственно ИД аккаунта, а Account - это relationship. Если бы у тебя были кастомные поля то они были бы Account__c и Account__r соответственно.
[/quote]
а что в CustomField__r можно вставить соответсвующий объект целиком по создании связанного объекта? я не знал
[quote="wilder"]
там таких переменных много. [/quote]
этакие глобальные переменные для SOQL, но все связанные со временем
Есть же известный хак для увеличения покрытия кода, основанный на этом свойстве.
[quote="Gres"]Есть же известный хак для увеличения покрытия кода, основанный на этом свойстве.[/quote]
Да там не один хак есть, что бы увеличить покрытие.
И снова столкнулся с детской неожиданностью.
этот контроллер создает кастомные объекта из кастомного класса (дата-класс), который описан отдельно (не в пределах самого контроллера).
так вот я не стал этот дата-класс включать в Чендж сет и ничего - все нормально протестировалось и отгрузилось в Прод.
в Проде эти классы тоже есть. Но в Проде код Чендж сет упал... и не завелся пока я не включил в ЧС этот класс.
не пойму почему это потребовалось делать... вроде этото класс уже есть в Проде... и мог бы оттуда вызван... получается что не мог
И снова столкнулся с детской неожиданностью.
этот контроллер создает кастомные объекта из кастомного класса (дата-класс), который описан отдельно (не в пределах самого контроллера).
так вот я не стал этот дата-класс включать в Чендж сет и ничего - все нормально протестировалось и отгрузилось в Прод.
в Проде эти классы тоже есть. Но в Проде код Чендж сет упал... и не завелся пока я не включил в ЧС этот класс.
не пойму почему это потребовалось делать... вроде этото класс уже есть в Проде... и мог бы оттуда вызван... получается что не мог
По поводу того что класс залился без тестов на прод (из темы) Такое может быть если суммарное покрытие кода на проде больше 75% (много покрытых тестами классов и один непокрытый погоды не делает относительно). НО возможно у тебя он все-таки косвенно вызывается и покрывается тестами? Посмотри в консоли по этому поводу.
На счет того что класс есть, а на него ругается при заливке changeSet - это точно ты что-то не досмотрел. Не может быть такого. Может класс на проде имеет префикс пакетный? или в классе появилось что-то новое? Проверь после заливки changeSet не появилось ли у тебя случайно 2 файла с таким названием на проде?
По поводу того что класс залился без тестов на прод (из темы)
Такое может быть если суммарное покрытие кода на проде больше 75% (много покрытых тестами классов и один непокрытый погоды не делает относительно). НО возможно у тебя он все-таки косвенно вызывается и покрывается тестами? Посмотри в консоли по этому поводу.
На счет того что класс есть, а на него ругается при заливке changeSet - это точно ты что-то не досмотрел. Не может быть такого. Может класс на проде имеет префикс пакетный? или в классе появилось что-то новое? Проверь после заливки changeSet не появилось ли у тебя случайно 2 файла с таким названием на проде?
НО возможно у тебя он все-таки косвенно вызывается и покрывается тестами? Посмотри в консоли по этому поводу.
нет не вызывается, там один здоровучий тест класс, и где его не гоняй, что в косоли, что в Эклипсе, тот контроллер вообще не покрыт.
На счет того что класс есть, а на него ругается при заливке changeSet - это точно ты что-то не досмотрел. Не может быть такого. Может класс на проде имеет префикс пакетный? или в классе появилось что-то новое? Проверь после заливки changeSet не появилось ли у тебя случайно 2 файла с таким названием на проде?
да нет у меня доступа к проду, чтобы все проверить. сам удивился. нет никаких префиксов, просто внутри контроллера создается лист объектов того дата-класса, куда и собирается инфа из записей... может этот дата класс доступен только в пределах "пакета" в роли которого выступает ЧСет, не знаю
[quote="Dmitry Shnyrev"]НО возможно у тебя он все-таки косвенно вызывается и покрывается тестами? Посмотри в консоли по этому поводу.[/quote]
нет не вызывается, там один здоровучий тест класс, и где его не гоняй, что в косоли, что в Эклипсе, тот контроллер вообще не покрыт.
[quote="Dmitry Shnyrev"]На счет того что класс есть, а на него ругается при заливке changeSet - это точно ты что-то не досмотрел. Не может быть такого. Может класс на проде имеет префикс пакетный? или в классе появилось что-то новое? Проверь после заливки changeSet не появилось ли у тебя случайно 2 файла с таким названием на проде?[/quote]
да нет у меня доступа к проду, чтобы все проверить. сам удивился. нет никаких префиксов, просто внутри контроллера создается лист объектов того дата-класса, куда и собирается инфа из записей... может этот дата класс доступен только в пределах "пакета" в роли которого выступает ЧСет, не знаю
Мб этот класс задеплоили давно? До активации (оплаты), прод ведет себя как сэнд
[quote="cidr8n"]Мб этот класс задеплоили давно?
До активации (оплаты), прод ведет себя как сэнд[/quote]
задеплоили в Прод тот класс давно. Но Прод вполне рабочий
Мб этот класс задеплоили давно? До активации (оплаты), прод ведет себя как сэнд
задеплоили в Прод тот класс давно. Но Прод вполне рабочий
[quote="Den Brown"][quote="cidr8n"]Мб этот класс задеплоили давно?
До активации (оплаты), прод ведет себя как сэнд[/quote]
задеплоили в Прод тот класс давно. Но Прод вполне рабочий[/quote]
Значит, задеплоили когда он еще был неоплаченным)
Значит, задеплоили когда он еще был неоплаченным)
А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?
[quote="cidr8n"]Значит, задеплоили когда он еще был неоплаченным)[/quote]
А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?
Значит, задеплоили когда он еще был неоплаченным)
А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?
Задеплоил класс в триал, он исправно работает Проплатили орг, класс по прежнему исправно работает. Попытались обновить класс из песка, класс работет, но обновление без тестов не деплоится
[quote="Dmitry Shnyrev"][quote="cidr8n"]Значит, задеплоили когда он еще был неоплаченным)[/quote]
А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?[/quote]
Задеплоил класс в триал, он исправно работает
Проплатили орг, класс по прежнему исправно работает.
Попытались обновить класс из песка, класс работет, но обновление без тестов не деплоится
Примерно такая история :)
Значит, задеплоили когда он еще был неоплаченным)
А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?
Задеплоил класс в триал, он исправно работает Проплатили орг, класс по прежнему исправно работает. Попытались обновить класс из песка, класс работет, но обновление без тестов не деплоится
Примерно такая история :)
Нормально все деплоится если общее покрытие >75% и нет падений в других тестах
[quote="cidr8n"][quote="Dmitry Shnyrev"][quote="cidr8n"]Значит, задеплоили когда он еще был неоплаченным)[/quote]
А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?[/quote]
Задеплоил класс в триал, он исправно работает
Проплатили орг, класс по прежнему исправно работает.
Попытались обновить класс из песка, класс работет, но обновление без тестов не деплоится
Примерно такая история :)[/quote]
Нормально все деплоится если общее покрытие >75% и нет падений в других тестах