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

Как получить name вставленной в тест классе записи?

Столкнулся с ситуацией:

тестирую МейлЛисенер, который читает 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 заполнять и использовать его.