Всем привет. Нужна Ваша помощь, потому что совсем нет идей, как это сделать.
Есть код(полный код очень длинный), основная суть его в том, что на странице Visualfroce есть некая таблица с полями и в этой таблице есть поле isDel, которое создано во внутреннем классе inClass{}(скорее всего неверная формулировка, поправьте, если так). Поле isDel необходимо для удаления. При удалении проверяется, есть ли поля с isDel==true, если да, то удаляются.
Так вот, тесты не проходят дальше проверки условия if(isDel==true).
isDel - это НЕ кастомное поле isDel__c и оно не создано так же как и все поля в объекте, поэтому я не могу его вызвать и заменить с помощью:
primer__c zadacha = new primer__c();
zadacha.isDel = ....
Вот мини пример кода:
public class kakClass{
class inClass{
public Boolean isDel {get;set;}
public primer__c pri {get;set;} //primer__c - объект с рандомными полями и записями
public inClass(primer__c a1){
pri = a1;
isDel = false;
}
}
}
Необходимо написать тесты для этого класса, но я не знаю как вызвать isDel и заменить его на true.
Буду рад любой помощи.
Всем привет. Нужна Ваша помощь, потому что совсем нет идей, как это сделать. Есть код(полный код очень длинный), основная суть его в том, что на странице Visualfroce есть некая таблица с полями и в этой таблице есть поле isDel, которое создано во внутреннем классе inClass{}(скорее всего неверная формулировка, поправьте, если так). Поле isDel необходимо для удаления. При удалении проверяется, есть ли поля с isDel==true, если да, то удаляются. Так вот, тесты не проходят дальше проверки условия if(isDel==true). isDel - это НЕ кастомное поле isDel__c и оно не создано так же как и все поля в объекте, поэтому я не могу его вызвать и заменить с помощью: primer__c zadacha = new primer__c(); zadacha.isDel = .... Вот мини пример кода: public class kakClass{ class inClass{ public Boolean isDel {get;set;} public primer__c pri {get;set;} //primer__c - объект с рандомными полями и записями public inClass(primer__c a1){ pri = a1; isDel = false; } } } Необходимо написать тесты для этого класса, но я не знаю как вызвать isDel и заменить его на true. Буду рад любой помощи.
kakClass.inClass test123 = new kakClass.inClass([SELECT ID FORM primer__c LIMIT 1]);
test123.isDel = true;
[code]kakClass.inClass test123 = new kakClass.inClass([SELECT ID FORM primer__c LIMIT 1]); test123.isDel = true;[/code]
Как раз пришел к такому коду и заглянул сюда, большое спасибо)
Теперь появился новая задача, как заинсертить новую запись с полем isDel = true, но написанный ниже пример и некоторые другие не проходят:
primer__c zadacha = new primer__c(
Name__c = 'name1'
);
kakClass.inClass test123 = new kakClass.inClass(zadacha);
test123.isDel = true;
insert zadacha;
Плюс нашел ошибку из-за которой примерно такой же код не работал раньше, возможно будет полезно для тех, кто столкнется с таким же:
1) inClass не был определен, как public.
2) new kakClass.inClass(...); - скобка была пустой.
Как раз пришел к такому коду и заглянул сюда, большое спасибо) Теперь появился новая задача, как заинсертить новую запись с полем isDel = true, но написанный ниже пример и некоторые другие не проходят: [code] primer__c zadacha = new primer__c( Name__c = 'name1' ); kakClass.inClass test123 = new kakClass.inClass(zadacha); test123.isDel = true; insert zadacha; [/code] Плюс нашел ошибку из-за которой примерно такой же код не работал раньше, возможно будет полезно для тех, кто столкнется с таким же: 1) inClass не был определен, как public. 2) new kakClass.inClass(...); - скобка была пустой.
insert test123.pri;
Для начала научитесь правильно и со смыслом называть переменные. После этого сразу станет понятно что и откуда надо дергать.
[code]insert test123.pri;[/code] Для начала научитесь правильно и со смыслом называть переменные. После этого сразу станет понятно что и откуда надо дергать.
Кстати ваш вариант тоже рабочий
primer__c zadacha = new primer__c(Name__c = 'name1');
kakClass.inClass test123 = new kakClass.inClass(zadacha);
test123.isDel = true;
insert zadacha;
Кстати ваш вариант тоже рабочий [code]primer__c zadacha = new primer__c(Name__c = 'name1'); kakClass.inClass test123 = new kakClass.inClass(zadacha); test123.isDel = true; insert zadacha;[/code] только он не имеет особого смысла в вашем случае.
Для начала научитесь правильно и со смыслом называть переменные. После этого сразу станет понятно что и откуда надо дергать.
Благодарю, код оказался полезен. Только возникла ошибка, которую исправил заменой insert test123.pri; на update test123.pri;.
Это был пример, поэтому переменные так названы, но по правде говоря и в нормальном коде они названы без смысла. В след. раз буду уделять больше внимания названиям, это действительно сделает код более понятным, спасибо, что обратили на это внимание.
Да, этот код рабочий, но в моем случае он не делал то, что я от него ждал. Поэтому и выразился так.
Теперь ошибок нет, но при тестировании кнопки удаления, опять не проходит дальше проверки условия if(isDel==true). Все прекрасно покрывается текстами, когда во внутреннем классе(inClass) я меняю изначальное значение isDel на true. Но если значение задается false, то дальше проверки не проходит.
Возможно, когда я вызываю метод удаления, таким способом:
kakClass controller = new kakClass();
controller.delete();
[quote="Dmitry Shnyrev"][code]insert test123.pri;[/code] Для начала научитесь правильно и со смыслом называть переменные. После этого сразу станет понятно что и откуда надо дергать.[/quote] Благодарю, код оказался полезен. Только возникла ошибка, которую исправил заменой insert test123.pri; на update test123.pri;. Это был пример, поэтому переменные так названы, но по правде говоря и в нормальном коде они названы без смысла. В след. раз буду уделять больше внимания названиям, это действительно сделает код более понятным, спасибо, что обратили на это внимание. Да, этот код рабочий, но в моем случае он не делал то, что я от него ждал. Поэтому и выразился так. Теперь ошибок нет, но при тестировании кнопки удаления, опять не проходит дальше проверки условия if(isDel==true). Все прекрасно покрывается текстами, когда во внутреннем классе(inClass) я меняю изначальное значение isDel на true. Но если значение задается false, то дальше проверки не проходит. Возможно, когда я вызываю метод удаления, таким способом: [code] kakClass controller = new kakClass(); controller.delete(); [/code] то оно не учитывает эту измененную запись. Пока что думаю, как это исправить.
Что-то я не нахожу исходного текста тестов с этой строкой. Как можно понять что там происходит ДО "условия if(isDel==true)"
[quote="artmat"]Теперь ошибок нет, но при тестировании кнопки удаления, опять не проходит дальше проверки условия if(isDel==true). [/quote] Что-то я не нахожу исходного текста тестов с этой строкой. Как можно понять что там происходит ДО "условия if(isDel==true)"
public void delete(){
if(wrapperlst.size()>0){
List<primer__c> stuList = new List<primer__c>();
for(inClass wrap : wrapperlst){
if(wrap.isDel == true)
stuList.add(wrap.pri);
}
1) wrapperlst - это list, который содержит все записи объекта
2) stuList.add(wrap.pri); - эта строка не покрывается, т.к. условия не true
[quote="Dmitry Shnyrev"][quote="artmat"]Теперь ошибок нет, но при тестировании кнопки удаления, опять не проходит дальше проверки условия if(isDel==true). [/quote] Что-то я не нахожу исходного текста тестов с этой строкой. Как можно понять что там происходит ДО "условия if(isDel==true)"[/quote] [code] public void delete(){ if(wrapperlst.size()>0){ List<primer__c> stuList = new List<primer__c>(); for(inClass wrap : wrapperlst){ if(wrap.isDel == true) stuList.add(wrap.pri); } [/code] 1) wrapperlst - это list, который содержит все записи объекта 2) stuList.add(wrap.pri); - эта строка не покрывается, т.к. условия не true
Ну судя по коду получается что вся проблема во wrapperlst.
Остается узнать как он формируется в тестах и что в нем находится перед стройкой
for(inClass wrap : wrapperlst){
Ну судя по коду получается что вся проблема во wrapperlst. Остается узнать как он формируется в тестах и что в нем находится перед стройкой [code]for(inClass wrap : wrapperlst){[/code]
Ну судя по коду получается что вся проблема во wrapperlst.
Остается узнать как он формируется в тестах и что в нем находится перед стройкойfor(inClass wrap : wrapperlst){
Как мне кажется, раз условие if(wrapperlst.size()>0) = true, то записи к нему должна была добавиться. Видимо я как-то не учитываю конструктор inClass.
public class inClass{
public primer__c pri {get;set;}
public Boolean IsSelDelete {get;set;}
public inClass(primer__c otobrazit){
pri = otobrazit;
IsSelDelete = false;
}
}
public List<inClass> wrapperlst {get;set;}
public kakClass(){
buKiri();
}public void buKiri(){
wrapperlst = new List<inClass>();
for(primer__c otobrazit : Database.query('SELECT Name__c FROM primer__c '))
wrapperlst.add(new inClass(otobrazit));
}
[quote="Dmitry Shnyrev"]Ну судя по коду получается что вся проблема во wrapperlst. Остается узнать как он формируется в тестах и что в нем находится перед стройкой [code]for(inClass wrap : wrapperlst){[/code][/quote] Как мне кажется, раз условие if(wrapperlst.size()>0) = true, то записи к нему должна была добавиться. Видимо я как-то не учитываю конструктор inClass. [code] public class inClass{ public primer__c pri {get;set;} public Boolean IsSelDelete {get;set;} public inClass(primer__c otobrazit){ pri = otobrazit; IsSelDelete = false; } } public List<inClass> wrapperlst {get;set;} public kakClass(){ buKiri(); } public void buKiri(){ wrapperlst = new List<inClass>(); for(primer__c otobrazit : Database.query('SELECT Name__c FROM primer__c ')) wrapperlst.add(new inClass(otobrazit)); } [/code]
Если я правильно понял isDel и IsSelDelete это одно и тоже просто переименованное.
Если так, то я в последнем примере не вижу чтобы IsSelDelete где-то переводился в True.
Вижу что по-умолчанию в конструкторе он выставляется в False. И все!
Поэтому условие
if(wrap.isDel == true)
Если я правильно понял isDel и IsSelDelete это одно и тоже просто переименованное. Если так, то я в последнем примере не вижу чтобы IsSelDelete где-то переводился в True. Вижу что по-умолчанию в конструкторе он выставляется в False. И все! Поэтому условие [code]if(wrap.isDel == true)[/code] не срабатывает
Если я правильно понял isDel и IsSelDelete это одно и тоже просто переименованное.
Если так, то я в последнем примере не вижу чтобы IsSelDelete где-то переводился в True.
Вижу что по-умолчанию в конструкторе он выставляется в False. И все!
Поэтому условие
if(wrap.isDel == true)
Да, isDel и IsSelDelete одно и тоже, прошу прощения. Если я вас правильно понял, то в самой программе на Visualforce странице isDel(IsSelDelete) является полем(inputCheckbox) в таблице. При нажатии на который, inputCheckbox и переводится в true, после чего кнопка удалить(метод delete()) и данная запись удаляется.
Если же вы имели ввиду текст самих тестов, то вот, что у меня выходит на данный момент:
primer__c zadacha = new primer__c(
Name = 'Name1'
);
insert zadacha;
kakClass controller = new kakClass();
kakClass.inClass func = new kakClass.inClass(zadacha);
func.isDel = true;
update func.pri;
controller.delete();
[quote="Dmitry Shnyrev"]Если я правильно понял isDel и IsSelDelete это одно и тоже просто переименованное. Если так, то я в последнем примере не вижу чтобы IsSelDelete где-то переводился в True. Вижу что по-умолчанию в конструкторе он выставляется в False. И все! Поэтому условие [code]if(wrap.isDel == true)[/code] не срабатывает[/quote] Да, isDel и IsSelDelete одно и тоже, прошу прощения. Если я вас правильно понял, то в самой программе на Visualforce странице isDel(IsSelDelete) является полем(inputCheckbox) в таблице. При нажатии на который, inputCheckbox и переводится в true, после чего кнопка удалить(метод delete()) и данная запись удаляется. Если же вы имели ввиду текст самих тестов, то вот, что у меня выходит на данный момент: [code] primer__c zadacha = new primer__c( Name = 'Name1' ); insert zadacha; kakClass controller = new kakClass(); kakClass.inClass func = new kakClass.inClass(zadacha); func.isDel = true; update func.pri; controller.delete(); [/code]
Суда по коду теста ваш func никак не передается в controller. Он тупо болтается отдельно, а контроллер про него ничего не знает.
Суда по коду теста ваш func никак не передается в controller. Он тупо болтается отдельно, а контроллер про него ничего не знает.
Советую разобраться с Developer Console и магической штукой
System.debug(<your_var>)
чтобы расставить по коду вывод в консоль основных переменных.
После этого запускать тесты и контролировать что выводится в логах.
Тогда все станет проще понимать почему не работает.
Советую разобраться с Developer Console и магической штукой System.debug(<your_var>) чтобы расставить по коду вывод в консоль основных переменных. После этого запускать тесты и контролировать что выводится в логах. Тогда все станет проще понимать почему не работает.
Советую разобраться с Developer Console и магической штукой
System.debug(<your_var>)
чтобы расставить по коду вывод в консоль основных переменных.
После этого запускать тесты и контролировать что выводится в логах.
Тогда все станет проще понимать почему не работает.
В Developer Console и пишу. Через apex anonymous пробовал удалить запись с помощью своего контроллера, но безуспешно. System.debug() использую, проследил, что запись поменяла isDel на true и после вызовов различным методов она так и осталась true, но не удалилась. Судя по этому, как вы верно подметили, func не передается в controller и тупо болтается отдельно, а контроллер про него ничего не знает. Возникает логичный вопрос. Как сделать так, что бы controller узнал про func, а точнее func передалась в controller?
[quote="Dmitry Shnyrev"]Советую разобраться с Developer Console и магической штукой System.debug(<your_var>) чтобы расставить по коду вывод в консоль основных переменных. После этого запускать тесты и контролировать что выводится в логах. Тогда все станет проще понимать почему не работает.[/quote] В Developer Console и пишу. Через apex anonymous пробовал удалить запись с помощью своего контроллера, но безуспешно. System.debug() использую, проследил, что запись поменяла isDel на true и после вызовов различным методов она так и осталась true, но не удалилась. Судя по этому, как вы верно подметили, func не передается в controller и тупо болтается отдельно, а контроллер про него ничего не знает. Возникает логичный вопрос. Как сделать так, что бы controller узнал про func, а точнее func передалась в controller?
Суда по коду теста ваш func никак не передается в controller. Он тупо болтается отдельно, а контроллер про него ничего не знает.
Появились идеи:
func. - после точки есть 3 варианта, 2 из которых были использованы, но 3-ий еще нет:
1) func.isDel
2) func.pri
3) func.inClass(otobrazit)
Что можно сделать с func.inClass(otobrazit)? Если я правильно понимаю, то это конструктор inClass, в нем и объявляется isDel=false. Можно ли тогда с помощью func.inClass(otobrazit) задать isDel=true, как по умолчанию. Если можно то, как это сделать?
[quote="Dmitry Shnyrev"]Суда по коду теста ваш func никак не передается в controller. Он тупо болтается отдельно, а контроллер про него ничего не знает.[/quote] Появились идеи: func. - после точки есть 3 варианта, 2 из которых были использованы, но 3-ий еще нет: 1) func.isDel 2) func.pri 3) func.inClass(otobrazit) Что можно сделать с func.inClass(otobrazit)? Если я правильно понимаю, то это конструктор inClass, в нем и объявляется isDel=false. Можно ли тогда с помощью func.inClass(otobrazit) задать isDel=true, как по умолчанию. Если можно то, как это сделать?