gpt4 book ai didi

tdd - 如何获取Unit组件?我可以使用 addAsync 获取解决方案吗?

转载 作者:行者123 更新时间:2023-12-04 19:35:44 25 4
gpt4 key购买 nike

我想构建一个有问题的程序,我发现我的第一批涉及自定义组件的测试倾向于遵循代码:

 import mx.core.Application;     
 import mx.events.FlexEvent;
 import flexunit.framework.TestCase;
public class CustomComponentTest extends TestCase {
private var component:CustomComponent;
public function testSomeAspect() : void {
component = new CustomComponent();
component.addEventListener(FlexEvent.CREATION_COMPLETE,
addAsync(verifySomeAspect, 5000));
component.height = 0;
component.width = 0;
Application.application.addChild(component);
}

public function verifySomeAspect(event:FlexEvent) : void {}

override public function tearDown() : void {
 try {
if (component) {
Application.application.removeChild(component);
component = null;
}
} catch (e:Error) {
 }
}

首先,您需要确保组件已完全初始化,然后才能可靠地验证它的任何内容,而在 Flex 中,这是在将组件添加到显示列表后异步发生的。因此,您需要设置一个回调(使用 FlexUnit 的 addAsync 函数)以便在发生这种情况时得到通知。最近我只是在必要的地方手动调用运行时会为你调用的方法,所以现在我的测试看起来更像这样:

import flexunit.framework.TestCase;
public class CustomComponentTest extends TestCase {
public function testSomeAspect() : void {
var component:CustomComponent = new CustomComponent();
 component.initialize();
component.validateProperties();
}

这更容易理解,但感觉有点像我在作弊。第一种情况是将它猛击到当前应用程序(这将是单元测试运行器 shell 应用程序),而后者不是“真实”环境。我想知道其他人会如何处理这种情况?

最佳答案

我同意第二个版本更短,但我不确定我是否认为它更容易理解。该测试做了很多您通常不会做的事情,而第一个示例更真实地说明了您将如何在测试环境之外使用该组件。

此外,在第二种形式中,您必须确保完全按照框架的要求进行操作,错过一个步骤,您的测试就不相关了,并且每个测试都必须重复此代码。在我看来,最好在尽可能接近真实情况的情况下对其进行测试。

你可以看看 dpUint 的序列,它们使组件测试更具声明性:

 public function testLogin():void {
var passThroughData:Object = new Object();
passThroughData.username = "myuser1";
passThroughData.password = "somepsswd";
var sequence:SequenceRunner = new SequenceRunner(this);
sequence.addStep(new SequenceSetter(form.usernameTI,

{text:passThroughData.username}));
sequence.addStep(new SequenceWaiter(form.usernameTI,

FlexEvent.VALUE_COMMIT, 100));
sequence.addStep(new SequenceSetter(form.passwordTI,

{text:passThroughData.password}));
sequence.addStep(new SequenceWaiter(form.passwordTI, FlexEvent.VALUE_COMMIT, 100));
sequence.addStep(new SequenceEventDispatcher(form.loginBtn,

new MouseEvent("click", true, false)));
sequence.addStep(new SequenceWaiter(form, "loginRequested", 100));
sequence.addAssertHandler(handleLoginEvent, passThroughData);
sequence.run();}

关于tdd - 如何获取Unit组件?我可以使用 addAsync 获取解决方案吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24550991/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com