curl is a tricky one, since SimpleTest does not have any support for 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, "[EMAIL PROTECTED]" <[EMAIL PROTECTED]> 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, "[EMAIL PROTECTED]" > > <[EMAIL PROTECTED]> 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 <[EMAIL PROTECTED]> 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 [email protected] To unsubscribe from this group, send email to [EMAIL PROTECTED] For more options, visit this group at http://groups.google.com/group/cake-php?hl=en -~----------~----~----~----~------~----~------~--~---
