2011-05-23 80 views
1

嘿家伙!
我们用FlexUnit编写UnitTests,我们只是测试我们的模型。现在我们也想测试视图。在我运行测试之前,我创建了一个我的视图和我的模型的实例来测试这些东西。当我尝试访问视图时,我得到一个空指针异常。如果我将视图添加到显示列表中,它以某种方式起作用 - 即使我在添加后从列表中删除它。实例化视图将不起作用

它看起来是这样的:

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


希望你可以给我一个提示。

西姆斯

回答

3

的Flex UIComponents的不通过组件的生命周期走,他们被添加到容器后,直到。因此,变量可能不会被初始化,并且如果您从不将其添加到容器中,则可能不会创建子项。

有关Flex Component LifeCycle的更多信息。将组件添加到容器后,您会注意到有11个步骤。

我怀疑添加它然后删除它可能会导致其他问题,但这取决于您要测试的内容。

要知道您的确切错误,我们必须查看视图上初始化方法中的代码。它最有可能访问尚未创建的孩子。

MXML组件通常会掩盖生命周期步骤,但组件仍然会通过它们。

我希望这有助于;但由于您没有提出问题,我不确定这是否是您之后的信息。

+0

+1。当你发布这个消息时,我写了几乎相同的答案。在测试生命周期外实例化视图是一个坏主意。如果他们没有在环境中生活,他们是为(生命周期)而设计的,那么你就不知道他们的行为是否正确。如果你不知道他们的行为是否正常,单元测试失去了可靠性。考虑一种不同的方法,如视图/行为分离或用于测试视图的功能测试工具。 – 2011-05-23 12:19:34

+0

感谢您的回答。 也许我不得不说,这只是尝试,因为有许多FlexUnit测试,但他们只测试模型和应用程序的某些部分没有模型,这是我的部分开始 - 测试GUI。
FlexMonkey出现了,但它似乎与FlexUnit非常相似 - (我可以问另一个问题^^)是否有一种方法可以将FlexUnit和Flexmonkey混合? – Sims 2011-05-23 12:29:34

+0

@Sims我没有看到FlexMonkey与FlexUnit类似。据我所知,可以将FlexMonkey测试保存为AS3;并从那里从FlexUnit跑步者中触发它们。尽管如此,这并不是我亲身体验过的。 – JeffryHouser 2011-05-23 12:39:06

1

除了什么(www.Flextras.com)写的,我也要发布,以及您可能会考虑采用不同的方法来测试您的意见。

首先,考虑像Presentation Model,MVP或MVC这样的分离模式。它们允许您将视图与视图行为分开,并测试与视图分开的行为。像这样的方法,如果正确完成,将会使您走很长的路,因为您可以最大限度地减少或消除视图中的AS3代码。

如果你真的想测试你的观点,我会建议你使用这个功能测试工具。单元测试框架适用于单独测试类。一旦开始谈论复杂生命周期的视图,功能测试框架开始变得有意义。

查看FlexMonkey作为Flex的功能性UI测试框架的示例。

+1

对FlexMonkey的建议+1。其他类似的选项是QTP和RIATest。 – JeffryHouser 2011-05-23 12:21:50

0

我建议您使用用户界面外观herehere。此功能专为UI组件测试而设计。