mock functions. As a result, you generally have to do exactly what you
are suggesting, the benefits being that you are somewhat separating
your interface from your implementation.
-J.
On Oct 2, 3:50 am, "martin.westin...@gmail.com"
<martin.westin...@gmail.com> wrote:
> The obvious dirty fix for a lot of this dawned on me. I guess I did
> not think of it earlier since I consider it bad style.
>
> I will have to re-factor my controllers and components so that the 2-4
> lines of code that uses curl (for example) get their own method. The
> poor style IMHO being to re-factor simply to make testing easier and
> not because it improved functionality or readability or anything else.
> And of-course I could never write a test for those lines that I would
> then need to capture in my test subclass. (They aren't many lines but
> I'd still like to include them just to be complete)
>
> I am going to give this approach a try. I would like a more complete
> but this would take me a good way.
>
> Funny how all tests depend on a single point. If I was to test a valve
> I would put air or liquid into one end and see what happened at the
> other end to determine how the valve worked. In code I find it
> extremely difficult to "look at both ends".
>
> Tanks for kick-starting my brain, Daniel.
> :)
>
> On Oct 2, 9:26 am, "martin.westin...@gmail.com"
>
> <martin.westin...@gmail.com> wrote:
> > Hi Daniel,
> > I'm not sure that would get me very far. For SOAP it would be possible
> > if I created a big mockup of nusoap, even though it looks pretty time-
> > consuming. I don't know of a way to do the same with curl.
>
> > Looking at the tests for EmailComponent I see that they are set up to
> > listen on port 25. Problem is this does not at all work on my system
> > (Mac) possibly because the os is using the same port. This is why I
> > stopped looking at ways to capture outgoing requests and instead have
> > tried to find a way to pretend to be the receiving end.
>
> > For http the trouble begins at the stage of trying to setup a
> > "fake" (or mock) recieving webserver inside my test case.
> > If I just point the request to localhost (or projectname.site) any
> > data sent wil be received by the "normal" app and database and not the
> > test.
>
> > It really would be enough for my needs to be able to
> > assertEqual($expected_url, $actual_url_called) or
> > assertTrue($fake_webserver->was_called)
> > or something of that sort.
>
> > On Oct 1, 4:02 pm, Daniel Hofstetter <dhofs...@gmail.com> wrote:
>
> > > Hi Martin,
>
> > > > I was wondering if anyone had some tips for a good way to write a test
> > > > for a Controller or Component that performs an outgoing request?
> > > > Ordinary models and things are so much more self-contained and
> > > > therefore usually not a big problem writing tests for.
>
> > > > In my case I a talking about a Component that performs SOAP calls to
> > > > an "outside" server, a Controller that works like a router/gateway
> > > > (incoming requests trigger calls to different sub-servers determined
> > > > by the content of the request and a stored list of available sub-
> > > > servers). It does this using simple curl.
>
> > > > I would like to be able to write a test for these to determine of the
> > > > correct SOAP-endpoint or http-address is contacted... without actually
> > > > contacting them. I can configure the endpoints to be somewhere o
> > > > localhost for the tests but I don't know how I would then make the
> > > > testcase capture that request and compare it to my expected result.
>
> > > > Another more common example would be an email-component where you
> > > > might want to test if the correct SMTP is contacted without sending a
> > > > bunch of emails.
>
> > > Maybe you can solve it with mock objects:http://www.simpletest.org/en/mock_objects_documentation.html
>
> > > Hope that helps!
>
> > > --
> > > Daniel Hofstetterhttp://cakebaker.42dh.com
--~--~---------~--~----~------------~-------~--~----~
You received this message because you are subscribed to the Google Groups "CakePHP" group.
To post to this group, send email to cake-php@googlegroups.com
To unsubscribe from this group, send email to cake-php+unsubscribe@googlegroups.com
For more options, visit this group at http://groups.google.com/group/cake-php?hl=en
-~----------~----~----~----~------~----~------~--~---
No comments:
Post a Comment