I have been working on this problem for the last day or two since we need asynchronous support for our own testing.  Unfortunately I’m working on code that works with the next version of Flex and I therefore can’t contribute it back quite yet.  If I have time in the next week or so I’ll try to port it back into a version that will work with 1.5 and send it to Ali for his approval.  As you can imagine it really changes a lot of the underlying FlexUnit system to prevent the next test from running while waiting for an asynchronous resultso it’s not a quick fix L

 

Matt

 


From: lm7e [mailto:[EMAIL PROTECTED]
Sent: Friday, February 11, 2005 7:57 AM
To: [email protected]
Subject: [flexcoders] Re: Asynchrony problem?

 


Cumhur,

I ran into this as well this week. After some tinkering, I came upon
a solution. I extended the FlexUnit TestCaseclass to make an
AsyncTestCase class from which my own test cases that make
asynchronous calls can inherit. In my case, I was testing my
services like this:

      public function testSomeServiceOperation() {
            var service : Object = Services.getInstance
().getService("someService");
            var pendingCall = service.someOperation();
            pendingCall.resultHandler = Delegate.create(this,
CheckResult);
            pendingCall.faultHandler = Delegate.create(this,
ServiceFailed);
      }

      public function CheckResult(result : Object) {
            ...
            asyncAddFailure("", "The test failed.");
            ...
      }

      public function ServiceFailed(result : Object) {
            asyncAddFailure("", "The service threw a fault.");
      }

From AsyncTestCase.as:
      public function asyncAddFailure(userMessage : String,
message : String) : Void {
            if (userMessage.length > 0) {
                  userMessage = userMessage + " - ";
            }
     
      mx.core.Application.application.testRunner.runner.treeDataPro
vider.addFailure(this, new Error(userMessage+ message));
     
      mx.core.Application.application.testRunner.testsTree.dispatch
Event({type:"change"});
      }

Note that I gave my TestRunner the id of 'testRunner'.

This is probably not the best solution and Iwould love to see a
more elegant one. So if anyone has solved this more elegantly, I
would be interested as well. Perhaps there can be a tighter
integration between Cairngorm and FlexUnit.

Hope this helps (for what it is),
Lawrence

--- In [email protected], "Cumhur Guzel" <[EMAIL PROTECTED]>
wrote:
> Hi folks,
>

>
> We are using cairngorm 0.9 version and and flexunit.
>

>
> We would like to create a testcase which initially setting the
input
> values up and then broadcasting an event
>

>
> that is creating a web service call at back-end,   processing it
> resulting output from web service and updating the view.
>

>
> Finally, we would like to test updated view object values against
the
> expected values we know before.
>

>
> We have created the test case given below. 
>

>
> (1), (2) sets the input values for testview.
>
> (3) submits the command
>
> (4)(5) waits for asynchronous  web service call to finish. (2000
> millisecond)
>
> (6) logger to localconnection
>
> (7) assertion
>

>
> This test is failing, however it is supposed to pass based on the
Logs
> and execution values supplied.
>
> It seems although we force this test method to stay in idle loop
for
> 2000 milliseconds, web service call is not finished off by the mean
> time.
>
> (I increased the time, it did not work)
>
> It seems problem is rooted to flash player single-threaded
> implementation,
>
> So would you guys recommend any workaround to overcome this
asynchrony
> problem or something else?
>

>
> Any help will be appreciated.
>

>
> Code piece is given below.
>

>
> public function testEndToEnd() {
>
>  _root.logonWindow.username.text = "tcfeu"; (1)
>
> _root.logonWindow.password.text = "1";       (2)
>
> EventBroadcaster.getInstance().broadcastEvent("SomeCommand");(3)
>
> var timer:Timer = new Timer();(4)
>
> while (!timer.wait(2000)); (5)
>
> Log.debug("SystemTests testEndToEnd() method has been called"); (6)
>
> assertEquals( "return value is different than expected " ,
>
> "value" ,
>
>  valueReturningFromWebServiceCall ); (7)
>
> }
>

>

>

>
> Cumhur Guzel
>
> Senior Developer
>
> Infomedia Ltd.
>
> Electronic Catalogues Division
>
> Phone:   +61 (0) 2 9454 1500
>
> Direct:    +61 (0) 2 9454 1709
>
> Fax:       +61 (0) 2 9454 1888
>
> Mobile:  +61  (0) 401 683 402
>
> Website: www.infomedia.com.au
>

>
> * This email transmission and any attachments may contain
privileged and
> confidential information. If you are not the intended recipient
you are
> not authorised to, read, distribute or reproduce any part of this
> transmission (including any attachments) without the prior written
> consent of the sender. If you have received this email in error,
please
> notify the sender by email immediately.
>
> * Opinions expressed in this email and any attachment are those of
the
> sender and not necessarily the opinionsof Infomedia.
>
> * Please scan this email and any attachment for viruses. Infomedia
takes
> all reasonable precautions to ensure no viruses are present in this
> email or accompanying attachments, but does not under any
circumstance
> accept any responsibility for loss or damage caused by viruses.





Reply via email to