我一直在研究如何处理在更快的服务器构建上开始失败的继承的 flexunit 测试。MyMockService 在单元测试开始运行之前没有准备好。我们正在使用 FlexUnit 和 Mockolate。
<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>
正在使用的通用导入:
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;
这是代码的存根。(我认为)重要的部分在那里,所以你得到了要点。
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 测试类引入了另一个测试。我订购了测试,发现我的测试现在每次都通过了。(这很好)我真的很讨厌测试只是为了让我得到准备完成所需的三秒延迟。
这是视觉效果的代码存根:
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();
}
}
我很高兴现在可以按应有的方式进行测试,但是感觉很脏。我一直假设 [Test] 块在 [Before] 块完成之前不会运行,但在此测试条件下似乎并非如此。我想对我来说,从你们那里得到的一个重要收获是,这个测试是否像我的模拟服务准备的方式那样糟糕,还有什么更好的方法可以避免为了争取时间而添加“睡眠”测试?(恕我直言,风格不佳)
感谢您提前输入。