首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >异步FlexUnit测试的错误或预期行为?

异步FlexUnit测试的错误或预期行为?
EN

Stack Overflow用户
提问于 2013-07-12 00:20:02
回答 1查看 401关注 0票数 1

我一直在研究如何处理继承的flexunit测试,该测试在更快的服务器构建上开始失败。在单元测试开始运行之前,MyMockService没有准备好。我们使用的是FlexUnit和Mockolate。

代码语言:javascript
复制
<failure 
    message="A proxy for com.something.somemock.service::MyMockService has not been prepared yet" 
    type="com.something.somemock.MyAsyncTest">ArgumentError: A proxy for com.something.somemock.service::MyMockService has not been prepared yet.
    //... (lots removed here)
</failure>

正在使用的通用导入:

代码语言:javascript
复制
import flash.events.Event;
import flexunit.framework.Assert;
import mockolate.nice;
import mockolate.prepare;
import mockolate.stub;
import mockolate.verify;
import org.flexunit.async.Async;
import flash.utils.Timer;
import flash.events.TimerEvent;

这是代码的一个存根。(我认为)重要的部分都在那里,所以你可以得到要点。

代码语言:javascript
复制
public class MyAsyncTest
{

    [Before(async)]
    public function prepareMockObjects():void
    {
        Async.proceedOnEvent(this, prepare(MyMockService), Event.COMPLETE);
    }

    [Test(async)]
    public function testExecute():void
    {

        var service:MyMockService = nice(MyMockService);
        verify(service).method("runSomething").args(ArgumentBuilder).once();

    }
}

在做了大量工作、更改超时和添加睡眠方法(在与错误的斗争中都是无用的)之后,我又向flexunit测试类引入了一个测试,它只包含一个延迟。我订购了测试,我发现我的测试现在每次都通过了。(这很好)我真的很讨厌把测试放进去,这样我就能有三秒钟的延迟来完成准备工作。

这是可视化的代码存根:

代码语言:javascript
复制
public class MyAsyncTest
{   
    protected function makeMeSleep(howLongMs:int):void
    {
        //timer code to sleep
    }

    [Before(async)]
    public function prepareMockObjects():void
    {
        Async.proceedOnEvent(this, prepare(MyMockService), Event.COMPLETE);
    }

    [Test(async, order=1)]
    public function delayTheNextTest():void
    {
        var hasPaused:Boolean = makeMeSleep(3000);
        Assert.assertTrue("This is a silly delay to allow the service to prepare", true);
    }

    [Test(async, order=2)]
    public function testExecute():void
    {
        var service:MyMockService = nice(MyMockService);
        verify(service).method("runSomething").args(ArgumentBuilder).once();        
    }
}

我很高兴现在可以像它应该的那样构建测试,但它感觉很脏。我一直假设测试块在完成之前不会运行,但在这种测试条件下似乎不是这样。我想对我来说,从你们那里学到的一个重要的东西是,这个测试是否与我的模拟服务的准备方式不同,以及有什么更好的方法可以避免仅仅为了争取时间而添加“睡眠”测试?(糟糕的风格本身就是IMHO)

感谢您的提前输入。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-07-12 04:13:34

我也遇到过类似的问题,我似乎记得读过Drew的回答,提到他知道它们的存在。

我发现异步测试的规则是可靠的,使用它们也使代码更具可读性。只需将MockolateRule和所需的模拟对象声明为成员变量(必须是公共的,才能正确提取元数据,并确保实例化规则!),然后与mock()一起使用,否则将使用nice()

代码语言:javascript
复制
[Rule]
public var myRule:MockolateRule = new MockolateRule();

[Mock]
public var myService:MyService;

[Before]
public function setUp():void {
    myService = mock(MyService);
}

[Test]
public function test():void {
    assertNotNull(myService);
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/17598577

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档