Столкнулся с ситуацией:
тестирую МейлЛисенер, который читает name из присланного файла и затем по этому имени ищет запись в БД.
так вот, когда тест-класс создает тест запись (которую и будет искать Листенер при тестировании далее):
(1) я не могу придать значение в name, оно само должно генится.
(2) после вставки myRecord myRecord.name равно null.
даже если выкверить эту запись после ее вставки по ее ID то все равно поле name приходит нулевым, я проверил в дебаге
не могу сообразить, что делать.
PS вижу что этот автономер создается с разным префиксом в зависимости от рекорд тайп новой записи. Не вижу где эта настройка на объекте. Но я включил в тесте SeeAllData выкверил ID нужного рекорд тайпа - передал в создаваемую запись - все равно нэйм нулевой после вставки.
Столкнулся с ситуацией: тестирую МейлЛисенер, который читает name из присланного файла и затем по этому имени ищет запись в БД. так вот, когда тест-класс создает тест запись (которую и будет искать Листенер при тестировании далее): (1) я не могу придать значение в name, оно само должно генится. (2) после вставки myRecord myRecord.name равно null. даже если выкверить эту запись после ее вставки по ее ID то все равно поле name приходит нулевым, я проверил в дебаге не могу сообразить, что делать. PS вижу что этот автономер создается с разным префиксом в зависимости от рекорд тайп новой записи. Не вижу где эта настройка на объекте. Но я включил в тесте SeeAllData выкверил ID нужного рекорд тайпа - передал в создаваемую запись - все равно нэйм нулевой после вставки.
нашел проблему: имя-автономер действительно можно выкверить после вставки - в моем случае в дебаг выходил нул, так как я просто передал не ту переменную в дебаг.
обнаружил, что рекорд тайп ID можно выкверить в тесте даже без seeAllData
случайно нашел в какомто мануале вот такой пример:
@isTest
private class SoslFixedResultsTest1 {public static testMethod void testSoslFixedResults() {
Id [] fixedSearchResults= new Id[1];
fixedSearchResults[0] = '001x0000003G89h';
Test.setFixedSearchResults(fixedSearchResults);
List<List<SObject>> searchList = [FIND 'test'
IN ALL FIELDS RETURNING
Account(id, name WHERE name = 'test' LIMIT 1)];
}
}
не понял, зачем это нужно в принципе, но тут почему то захардкоден ID и есть новый для меня метод Test.setFixedSearchResults();
хотя бы запомню пример - может в будущем сгодится
нашел проблему: [b]имя-автономер действительно можно выкверить[/b] после вставки - в моем случае в дебаг выходил нул, так как я просто передал не ту переменную в дебаг. обнаружил, что рекорд тайп ID можно выкверить в тесте даже без seeAllData случайно нашел в какомто мануале вот такой пример: [code] @isTest private class SoslFixedResultsTest1 { public static testMethod void testSoslFixedResults() { Id [] fixedSearchResults= new Id[1]; fixedSearchResults[0] = '001x0000003G89h'; Test.setFixedSearchResults(fixedSearchResults); List<List<SObject>> searchList = [FIND 'test' IN ALL FIELDS RETURNING Account(id, name WHERE name = 'test' LIMIT 1)]; } } [/code] не понял, зачем это нужно в принципе, но тут почему то захардкоден ID и есть новый для меня метод [b]Test.setFixedSearchResults();[/b] хотя бы запомню пример - может в будущем сгодится
Test.setFixedSearchResults(); метод я так понимаю нужен больше для тестирования SOSL запросов. По логике твоего примера - он ограничивает возвращаемый SOSL запросом результат.
По поводу использовать где-то ID в чистом (текстовом) - это полный бред. Никогда так нельзя делать, тем более в тестах. То что видно в этом примере - это наверное для наглядности больше чем для практической цели.
Auto generated Name - действительно нужно получить из базы отдельным запросом после того как вставлена запись, но опять же встает вопрос - если логика твоего приложения подразумевает что тебе надо однозначно идентифицировать запись в базе (хоть из письма или из какого-то запроса), то логичнее было бы использовать родной ID записи, вместо Name даже если оно автоматически генерируется.
Test.setFixedSearchResults(); метод я так понимаю нужен больше для тестирования SOSL запросов. По логике твоего примера - он ограничивает возвращаемый SOSL запросом результат. По поводу использовать где-то ID в чистом (текстовом) - это полный бред. Никогда так нельзя делать, тем более в тестах. То что видно в этом примере - это наверное для наглядности больше чем для практической цели. Auto generated Name - действительно нужно получить из базы отдельным запросом после того как вставлена запись, но опять же встает вопрос - если логика твоего приложения подразумевает что тебе надо однозначно идентифицировать запись в базе (хоть из письма или из какого-то запроса), то логичнее было бы использовать родной ID записи, вместо Name даже если оно автоматически генерируется.
Добавлю - автоматически генерируемое имя больше для красоты, чем для практических целей. Если использовать родной ID не получается (например в целях безопасности), то лучше создать отдельное поле c типом ExternalID заполнять и использовать его.
Добавлю - автоматически генерируемое имя больше для красоты, чем для практических целей. Если использовать родной ID не получается (например в целях безопасности), то лучше создать отдельное поле c типом ExternalID заполнять и использовать его.