Hi Alex,

Thanks for the example. This helps as I'm new to Mocking. Now I know what 
I'll be doing Monday evening :)

Kind regards,
Chris

On Sunday, August 19, 2012 10:10:34 PM UTC+2, alex wrote:
>
> I think you can do it with pretty much any mock framework, but to give you 
> an idea of what I mean in the prev. msg:
>
> ServletInputStream stream = new MockInputStream(some_bytes_or_string_data);
> request = mock(HttpServletRequest.class);
> when(request.getInputStream()).thenReturn(stream);
> when(request.getServletPath()).thenReturn(some_path);
> ...
>
> response = mock(HttpServletResponse.class);
> output = new StringWriter();
> when(response.getWriter()).thenReturn(new PrintWriter(output));
>
> - MockInputStream is really just a ServletInputStream only that it takes a 
> string (fake request data) as a constructor param.
> - mocking getWriter() is just an sample I've taken from one of our app 
> where I know it always uses getWriter(), otherwise I'd mock other methods.
>
> The above would be defined somewhere a BaseTest class, so our tests really 
> boil down to something like:
>
> public void testSomething() {
>   resp = get("/some/path?query=goes&here=too")
>   // or post(payload)
>
>   // do something with resp, 
>   // e.g. make assertions 
> }
>
> Maybe there's a better way but the idea above works pretty well for us.
>
>
> On Sunday, August 19, 2012 9:26:23 PM UTC+2, Christopher Armstrong wrote:
>>
>> Hi Alex,
>>
>> Thanks for your valuable input. I'll take a look at Mockito. 
>>
>> Kind regards,
>> Chris
>>
>> On Sunday, August 19, 2012 7:43:34 PM UTC+2, alex wrote:
>>>
>>> I never used Jersey but what we're doing in this kind of testing is 
>>> simply mocking (HttpServletRequest)request.getInputStream() and a couple 
>>> other methods  so that they would operate on payloads provided within the 
>>> unit tests or files on a disk, and (mocked) Response would write to a 
>>> string (instead of real HTTP communication). 
>>>
>>> Nice thing about this is the tests are run really fast as no external 
>>> processes (e.g. dev server) are launched during testing. Plus, Testbed is 
>>> always available  in case there's a need to check some internal states. 
>>> Also, the only external lib dependency (testing-wise) with which we mock 
>>> classes like HttpServletResponse is Mockito.
>>>
>>>
>>> On Sunday, August 19, 2012 2:54:40 PM UTC+2, Christopher Armstrong wrote:
>>>>
>>>> Hello,
>>>>
>>>> I'm currently developing an application in Java and want to use 
>>>> AppEngine. My setup uses Jersey JSON/REST to exchange data between the 
>>>> client and the server.
>>>>
>>>> I would like to do following in the development mode with JUnit:
>>>> * Start AppEngine
>>>> * Execute Tests
>>>> * Stop AppEngine
>>>>
>>>> I have had two threads open on Stackoverflow. First thread was how I 
>>>> can start AppEngine over Junit without spawning threads so that I can test 
>>>> my REST resources. I have been told that this is an integration test and 
>>>> Junit can't be used for that. I should try to test by executing the 
>>>> methods 
>>>> of the resource class directly. Ok, I was thinking but it is somehow funny 
>>>> because when reading the Jersey docs they suggest exactly this. Starting a 
>>>> webserver to test the REST resources with Junit.
>>>>
>>>> I tried then to execute the methods directly and this worked at least 
>>>> for the getStatus() method from the Response class. But when I execute the 
>>>> methods directly and want to use getEntity() method of the Response class 
>>>> I 
>>>> can't marshal the object back in to the entity class. So this isn't 
>>>> working 
>>>> either out of some reason and I'm unable get the created record back so 
>>>> that I have the contents.
>>>>
>>>> Is there any best practice provided by Google to test REST interfaces 
>>>> in an automated manner or does anybody know how to test jersey resource 
>>>> classes properly (without curl on the command line)?
>>>>
>>>> Its nice that I'm doing it all wrong and that Junit has nothing to do 
>>>> with Integration testing but somehow I need to test my classes. It would 
>>>> be 
>>>> great if somebody could give me a hint.
>>>>
>>>> Thanks,
>>>> Chris
>>>>
>>>>

-- 
You received this message because you are subscribed to the Google Groups 
"Google App Engine" group.
To view this discussion on the web visit 
https://groups.google.com/d/msg/google-appengine/-/buJYfYz-dfUJ.
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/google-appengine?hl=en.

Reply via email to