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

Контроллер на 800 строк прошел в ПРод вообще не покрытым тестом. Возможно ли такое?

Работаю с одним большим старым приложением.

нужно было апдатировать один контроллер на 800 строк.

так вот, перед сбором в Чендж сет, ищу тест, который его покрывает.

нахожу здоровучий тест, на весь код в этом Приложении, который имеет много тест методов, которые хорошо покрывают многие (вероятно почти все требуемые) классы. И тот тест имеет спец метод (он последний из них) которые покрывает мои контроллер. Только он не покрывает его вовсе. Не падает, но и не покрывает: контроллер вообще не вызывается.

Вопрос: как этот контроллер вообще попал в Прод (а он там есть и хорошо работает)?

У меня только один вариант: при отправке или деплойменте система проверяет общее покрытие на весь чендж сет. То есть так как прочие классы в пределах сета были покрыты почто на 99%, но непокрытые строки нашего контроллера отъели какие проценты от 99% покрытие, но в связи с тем что кода покрытого было много в целом, процентовка удержалась в пределах >75%... т.е. там нет проверки процентовки применительно к каждому отдельному классу...

такое возможно?

Работаю с одним большим старым приложением.

нужно было апдатировать один контроллер на 800 строк.

так вот, перед сбором в Чендж сет, ищу тест, который его покрывает.

нахожу здоровучий тест, на весь код в этом Приложении, который имеет много тест методов, которые хорошо покрывают многие (вероятно почти все требуемые) классы. И тот тест имеет спец метод (он последний из них) которые покрывает мои контроллер. Только он не покрывает его вовсе. Не падает, но и не покрывает: контроллер вообще не вызывается.

Вопрос: как этот контроллер вообще попал в Прод (а он там есть и хорошо работает)?

У меня только один вариант: при отправке или деплойменте система проверяет общее покрытие на весь чендж сет. То есть так как прочие классы в пределах сета были покрыты почто на 99%, но  непокрытые строки нашего контроллера отъели какие проценты от 99% покрытие, но в связи с тем что кода покрытого было много в целом, процентовка удержалась в пределах >75%... т.е. там нет проверки процентовки применительно к каждому отдельному классу...

такое возможно?

Den Brown
Работаю с одним большим старым приложением.

нужно было апдатировать один контроллер на 800 строк.

так вот, перед сбором в Чендж сет, ищу тест, который его покрывает.

нахожу здоровучий тест, на весь код в этом Приложении, который имеет много тест методов, которые хорошо покрывают многие (вероятно почти все требуемые) классы. И тот тест имеет спец метод (он последний из них) которые покрывает мои контроллер. Только он не покрывает его вовсе. Не падает, но и не покрывает: контроллер вообще не вызывается.

Вопрос: как этот контроллер вообще попал в Прод (а он там есть и хорошо работает)?

У меня только один вариант: при отправке или деплойменте система проверяет общее покрытие на весь чендж сет. То есть так как прочие классы в пределах сета были покрыты почто на 99%, но непокрытые строки нашего контроллера отъели какие проценты от 99% покрытие, но в связи с тем что кода покрытого было много в целом, процентовка удержалась в пределах >75%... т.е. там нет проверки процентовки применительно к каждому отдельному классу...

такое возможно?

Все правильно определил. Если общее покрытие больше 75% нет никаких проблем.

[quote="Den Brown"]Работаю с одним большим старым приложением.

нужно было апдатировать один контроллер на 800 строк.

так вот, перед сбором в Чендж сет, ищу тест, который его покрывает.

нахожу здоровучий тест, на весь код в этом Приложении, который имеет много тест методов, которые хорошо покрывают многие (вероятно почти все требуемые) классы. И тот тест имеет спец метод (он последний из них) которые покрывает мои контроллер. Только он не покрывает его вовсе. Не падает, но и не покрывает: контроллер вообще не вызывается.

Вопрос: как этот контроллер вообще попал в Прод (а он там есть и хорошо работает)?

У меня только один вариант: при отправке или деплойменте система проверяет общее покрытие на весь чендж сет. То есть так как прочие классы в пределах сета были покрыты почто на 99%, но  непокрытые строки нашего контроллера отъели какие проценты от 99% покрытие, но в связи с тем что кода покрытого было много в целом, процентовка удержалась в пределах >75%... т.е. там нет проверки процентовки применительно к каждому отдельному классу...

такое возможно?[/quote]

Все правильно определил. Если общее покрытие больше 75% нет никаких проблем.

wilder
Если общее покрытие больше 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

Den Brown
wilder
Если общее покрытие больше 75% нет никаких проблем.

ха-ха.

кстати заметил две странные вещи в чужом тесте:

1) для вставки Контакта нужно дать ему Аккаунт.

так вот поля Account нет на Контакте, а вставить в него Account-объект можно, и после вставляется и сам контакт.

зато есть поле AccountId. Но если в "поле" Account вставить Account-объект, то поле AccountId все-равно остается пустым...

2) есть чудо переменные THIS_FISCAL_YEAR, LAST_FISCAL_YEAR в SOQL

1. AccountId - это непосредственно ИД аккаунта, а Account - это relationship. Если бы у тебя были кастомные поля то они были бы Account__c и Account__r соответственно.

2. там таких переменных много. Примеры

[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]

wilder
1. AccountId - это непосредственно ИД аккаунта, а Account - это relationship. Если бы у тебя были кастомные поля то они были бы Account__c и Account__r соответственно.

а что в CustomField__r можно вставить соответсвующий объект целиком по создании связанного объекта? я не знал

wilder
там таких переменных много.

этакие глобальные переменные для SOQL, но все связанные со временем

[quote="wilder"]

1. AccountId - это непосредственно ИД аккаунта, а Account - это relationship. Если бы у тебя были кастомные поля то они были бы Account__c и Account__r соответственно.
[/quote]

а что в CustomField__r можно вставить соответсвующий объект целиком по создании связанного объекта? я не знал

[quote="wilder"]

там таких переменных много. [/quote]
этакие глобальные переменные для SOQL, но все связанные со временем

Есть же известный хак для увеличения покрытия кода, основанный на этом свойстве.

Есть же известный хак для увеличения покрытия кода, основанный на этом свойстве.

Gres
Есть же известный хак для увеличения покрытия кода, основанный на этом свойстве.

Да там не один хак есть, что бы увеличить покрытие.

[quote="Gres"]Есть же известный хак для увеличения покрытия кода, основанный на этом свойстве.[/quote]

Да там не один хак есть, что бы увеличить покрытие.

И снова столкнулся с детской неожиданностью.

этот контроллер создает кастомные объекта из кастомного класса (дата-класс), который описан отдельно (не в пределах самого контроллера).

так вот я не стал этот дата-класс включать в Чендж сет и ничего - все нормально протестировалось и отгрузилось в Прод.

в Проде эти классы тоже есть. Но в Проде код Чендж сет упал... и не завелся пока я не включил в ЧС этот класс.

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

И снова столкнулся с детской неожиданностью.

этот контроллер создает кастомные объекта из кастомного класса (дата-класс), который описан отдельно (не в пределах самого контроллера).

так вот я не стал этот дата-класс включать в Чендж сет и ничего - все нормально протестировалось и отгрузилось в Прод.

в Проде эти классы тоже есть. Но в Проде код Чендж сет упал... и не завелся пока я не включил в ЧС  этот класс.

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

По поводу того что класс залился без тестов на прод (из темы)
Такое может быть если суммарное покрытие кода на проде больше 75% (много покрытых тестами классов и один непокрытый погоды не делает относительно). НО возможно у тебя он все-таки косвенно вызывается и покрывается тестами? Посмотри в консоли по этому поводу.

На счет того что класс есть, а на него ругается при заливке changeSet - это точно ты что-то не досмотрел. Не может быть такого. Может класс на проде имеет префикс пакетный? или в классе появилось что-то новое? Проверь после заливки changeSet не появилось ли у тебя случайно 2 файла с таким названием на проде?

По поводу того что класс залился без тестов на прод (из темы)
Такое может быть если суммарное покрытие кода на проде больше 75% (много покрытых тестами классов и один непокрытый погоды не делает относительно). НО возможно у тебя он все-таки косвенно вызывается и покрывается тестами? Посмотри в консоли по этому поводу.

На счет того что класс есть, а на него ругается при заливке changeSet - это точно ты что-то не досмотрел. Не может быть такого. Может класс на проде имеет префикс пакетный? или в классе появилось что-то новое? Проверь после заливки changeSet не появилось ли у тебя случайно 2 файла с таким названием на проде?

Dmitry Shnyrev
НО возможно у тебя он все-таки косвенно вызывается и покрывается тестами? Посмотри в консоли по этому поводу.

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

Dmitry Shnyrev
На счет того что класс есть, а на него ругается при заливке changeSet - это точно ты что-то не досмотрел. Не может быть такого. Может класс на проде имеет префикс пакетный? или в классе появилось что-то новое? Проверь после заливки changeSet не появилось ли у тебя случайно 2 файла с таким названием на проде?

да нет у меня доступа к проду, чтобы все проверить. сам удивился. нет никаких префиксов, просто внутри контроллера создается лист объектов того дата-класса, куда и собирается инфа из записей... может этот дата класс доступен только в пределах "пакета" в роли которого выступает ЧСет, не знаю

[quote="Dmitry Shnyrev"]НО возможно у тебя он все-таки косвенно вызывается и покрывается тестами? Посмотри в консоли по этому поводу.[/quote]

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

[quote="Dmitry Shnyrev"]На счет того что класс есть, а на него ругается при заливке changeSet - это точно ты что-то не досмотрел. Не может быть такого. Может класс на проде имеет префикс пакетный? или в классе появилось что-то новое? Проверь после заливки changeSet не появилось ли у тебя случайно 2 файла с таким названием на проде?[/quote]
да нет у меня доступа к проду, чтобы все проверить. сам удивился. нет никаких префиксов, просто внутри контроллера создается лист объектов того дата-класса, куда и собирается инфа из записей... может этот дата класс доступен только в пределах "пакета" в роли которого выступает ЧСет, не знаю

Мб этот класс задеплоили давно?
До активации (оплаты), прод ведет себя как сэнд

Мб этот класс задеплоили давно? 
До активации (оплаты), прод ведет себя как сэнд

cidr8n
Мб этот класс задеплоили давно?
До активации (оплаты), прод ведет себя как сэнд

задеплоили в Прод тот класс давно. Но Прод вполне рабочий

[quote="cidr8n"]Мб этот класс задеплоили давно? 
До активации (оплаты), прод ведет себя как сэнд[/quote]

задеплоили в Прод тот класс давно. Но Прод вполне рабочий

Den Brown
cidr8n
Мб этот класс задеплоили давно?
До активации (оплаты), прод ведет себя как сэнд

задеплоили в Прод тот класс давно. Но Прод вполне рабочий

Значит, задеплоили когда он еще был неоплаченным)

[quote="Den Brown"][quote="cidr8n"]Мб этот класс задеплоили давно? 
До активации (оплаты), прод ведет себя как сэнд[/quote]

задеплоили в Прод тот класс давно. Но Прод вполне рабочий[/quote]

Значит, задеплоили когда он еще был неоплаченным)

cidr8n
Значит, задеплоили когда он еще был неоплаченным)

А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?

[quote="cidr8n"]Значит, задеплоили когда он еще был неоплаченным)[/quote]
А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?

Dmitry Shnyrev
cidr8n
Значит, задеплоили когда он еще был неоплаченным)

А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?

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

Примерно такая история :)

[quote="Dmitry Shnyrev"][quote="cidr8n"]Значит, задеплоили когда он еще был неоплаченным)[/quote]
А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?[/quote]

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

Примерно такая история :)

cidr8n
Dmitry Shnyrev
cidr8n
Значит, задеплоили когда он еще был неоплаченным)

А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?

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

Примерно такая история :)

Нормально все деплоится если общее покрытие >75% и нет падений в других тестах

[quote="cidr8n"][quote="Dmitry Shnyrev"][quote="cidr8n"]Значит, задеплоили когда он еще был неоплаченным)[/quote]
А это что означает? Если залили класс когда орг был триальным, а потом стал проплаченным, то классы недоступны?[/quote]

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

Примерно такая история :)[/quote]

Нормально все деплоится если общее покрытие >75% и нет падений в других тестах