инстанцирующий вид не сработает - PullRequest
1 голос
/ 23 мая 2011

Эй, ребята!Мы писали наши UnitTests с FlexUnit, и мы просто тестировали нашу модель.Теперь мы хотим проверить вид тоже.Прежде чем запускать свои тесты, я создаю экземпляр моего представления и мою модель для тестирования материала.Когда я пытаюсь получить доступ к представлению, я получаю исключение нулевого указателя.Если я добавляю представление в список отображения, оно каким-то образом работает - даже если я удаляю его из списка сразу после добавления.

это выглядит примерно так:

var myView: MyView = new myView();
//myView.initialize(); will throw error
Application.application.addChild(view);
Application.application.removeChild(view);
myView.initialize(); // will work

Надеюсь, вы можете дать мне подсказку.

Sims

Ответы [ 3 ]

3 голосов
/ 23 мая 2011

Компоненты Flex UIC не проходят жизненный цикл компонента до тех пор, пока не будут добавлены в контейнер. Таким образом, переменные не могут быть инициализированы, а дочерние элементы не могут быть созданы, если вы никогда не добавите их в контейнер.

Дополнительная информация о Flex Component LifeCycle . Вы заметите, что есть 11 шагов после добавления компонента в контейнер.

Я подозреваю, что добавление, а затем удаление может вызвать другие проблемы, но это зависит от того, что вы пытаетесь проверить.

Чтобы узнать вашу точную ошибку, нам нужно посмотреть, какой код находится в методе initialize в представлении. Скорее всего, он обращается к ребенку, который еще не был создан.

Компоненты MXML часто маскируют шаги жизненного цикла, но компонент все равно будет проходить через них.

Надеюсь, это поможет; но так как вы не задавали вопрос, я не уверен, что это была информация, которую вы искали.

1 голос
/ 23 мая 2011

В дополнение к тому, что (www.Flextras.com) написал, что я также собирался опубликовать, вы могли бы рассмотреть другой подход к проверке ваших взглядов.

Сначала рассмотрим шаблон разделения, такой как Модель представления, MVP или MVC. Они позволяют вам отделить ваше представление от поведения вашего представления и протестировать поведение отдельно от представления. Подобный подход, если все сделано правильно, займет у вас долгий путь, потому что вы минимизируете или исключите код AS3 в своем представлении.

Если вы действительно хотите проверить свои представления, я бы предложил использовать для этого инструмент функционального тестирования. Фреймворки модульных тестов хороши для тестирования классов изолированно Как только вы начинаете говорить о представлениях, которые имеют сложные жизненные циклы, начинает функционировать среда функционального тестирования.

Посмотрите на FlexMonkey как пример функциональной среды тестирования пользовательского интерфейса для Flex.

0 голосов
/ 23 мая 2011

Я рекомендую вам использовать интерфейс интерфейса пользователя, описанный здесь или здесь . Эта функциональность разработана специально для тестирования компонентов пользовательского интерфейса.

...