Quantcast

Unit Testing code that uses the Jersey Client API

classic Classic list List threaded Threaded
6 messages Options
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Unit Testing code that uses the Jersey Client API

Ronak Patel
Hello,

I'm trying to write unit tests for code that uses the Jersey Client API. Granted that the main Client class is a class and not an interface (and the fact that it is created via a static method) does not really aid in mocking it out.

What have people generally done when trying to mock this out?

Do you resort to using cglib to mock the class (instead of asm) and then go from there? or is there some sort of framework/API in Jersey that aids in this?

Thanks,

Ronak Patel
Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Unit Testing code that uses the Jersey Client API

Pavel Bucek-2
Hi,

I wouldn't try to mock jersey client, it looks like hard thing to do - it is too complex for this I think.

You have several options how to approach this:

1) using jersey test framework
    you should be able to create (or maybe reuse if you already have them) resources which could serve similarly as mocking. You might be able to use in memory container, so it would be fast. But this depends on the code you want to test - it might not be possible (for example, you'll need to have the possibility to use client provided by framework). And additionally, Jersey server (runtime dependencies) and related dependencies are needed for this to work.

2) hacking jersey client
    it is possible to subclass or modify jersey client to *not* actually call any rest service, all you need to do is implement your own TerminatingClientHandler, see [1] for example.

both proposed solutions require some additional code, but I like first option more..

I would like to know what path are you going to choose, so please keep us posted :)

Regards,
Pavel


[1] http://java.net/projects/jersey/sources/svn/content/trunk/jersey/jersey-test-framework/jersey-test-framework-inmemory/src/main/java/com/sun/jersey/test/framework/impl/container/inmemory/TestResourceClientHandler.java


On 12/7/11 7:15 PM, Ronak Patel wrote:
Hello,

I'm trying to write unit tests for code that uses the Jersey Client API. Granted that the main Client class is a class and not an interface (and the fact that it is created via a static method) does not really aid in mocking it out.

What have people generally done when trying to mock this out?

Do you resort to using cglib to mock the class (instead of asm) and then go from there? or is there some sort of framework/API in Jersey that aids in this?

Thanks,

Ronak Patel

Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Unit Testing code that uses the Jersey Client API

Ronak Patel
Hi Pavel,

Setting up and using the Jersey Test Framework seems more like an integration test to me rather than a unit test.
Same thing goes for using it to bring up a resource and then using the Jersey client to make REST calls.

They will require having databases set up with test data and so on just to make one unit test pass....
That seems rather excessive for a unit test (but totally okay for an integration test).

The Client class is not final and has a default constructor, so it seems cglib/EasyMock would work here.
I'll try it out and let you know how that goes.

Ronak


From: Pavel Bucek <[hidden email]>
To: [hidden email]
Sent: Thursday, December 8, 2011 5:40 AM
Subject: [Jersey] Re: Unit Testing code that uses the Jersey Client API

Hi,

I wouldn't try to mock jersey client, it looks like hard thing to do - it is too complex for this I think.

You have several options how to approach this:

1) using jersey test framework
    you should be able to create (or maybe reuse if you already have them) resources which could serve similarly as mocking. You might be able to use in memory container, so it would be fast. But this depends on the code you want to test - it might not be possible (for example, you'll need to have the possibility to use client provided by framework). And additionally, Jersey server (runtime dependencies) and related dependencies are needed for this to work.

2) hacking jersey client
    it is possible to subclass or modify jersey client to *not* actually call any rest service, all you need to do is implement your own TerminatingClientHandler, see [1] for example.

both proposed solutions require some additional code, but I like first option more..

I would like to know what path are you going to choose, so please keep us posted :)

Regards,
Pavel


[1] http://java.net/projects/jersey/sources/svn/content/trunk/jersey/jersey-test-framework/jersey-test-framework-inmemory/src/main/java/com/sun/jersey/test/framework/impl/container/inmemory/TestResourceClientHandler.java


On 12/7/11 7:15 PM, Ronak Patel wrote:
Hello,

I'm trying to write unit tests for code that uses the Jersey Client API. Granted that the main Client class is a class and not an interface (and the fact that it is created via a static method) does not really aid in mocking it out.

What have people generally done when trying to mock this out?

Do you resort to using cglib to mock the class (instead of asm) and then go from there? or is there some sort of framework/API in Jersey that aids in this?

Thanks,

Ronak Patel



Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Unit Testing code that uses the Jersey Client API

amsmota
If everithing fails, you can allways use AspectJ... 




On 8 December 2011 14:28, Ronak Patel <[hidden email]> wrote:
Hi Pavel,

Setting up and using the Jersey Test Framework seems more like an integration test to me rather than a unit test.
Same thing goes for using it to bring up a resource and then using the Jersey client to make REST calls.

They will require having databases set up with test data and so on just to make one unit test pass....
That seems rather excessive for a unit test (but totally okay for an integration test).

The Client class is not final and has a default constructor, so it seems cglib/EasyMock would work here.
I'll try it out and let you know how that goes.

Ronak


From: Pavel Bucek <[hidden email]>
To: [hidden email]
Sent: Thursday, December 8, 2011 5:40 AM
Subject: [Jersey] Re: Unit Testing code that uses the Jersey Client API

Hi,

I wouldn't try to mock jersey client, it looks like hard thing to do - it is too complex for this I think.

You have several options how to approach this:

1) using jersey test framework
    you should be able to create (or maybe reuse if you already have them) resources which could serve similarly as mocking. You might be able to use in memory container, so it would be fast. But this depends on the code you want to test - it might not be possible (for example, you'll need to have the possibility to use client provided by framework). And additionally, Jersey server (runtime dependencies) and related dependencies are needed for this to work.

2) hacking jersey client
    it is possible to subclass or modify jersey client to *not* actually call any rest service, all you need to do is implement your own TerminatingClientHandler, see [1] for example.

both proposed solutions require some additional code, but I like first option more..

I would like to know what path are you going to choose, so please keep us posted :)

Regards,
Pavel


[1] http://java.net/projects/jersey/sources/svn/content/trunk/jersey/jersey-test-framework/jersey-test-framework-inmemory/src/main/java/com/sun/jersey/test/framework/impl/container/inmemory/TestResourceClientHandler.java


On 12/7/11 7:15 PM, Ronak Patel wrote:
Hello,

I'm trying to write unit tests for code that uses the Jersey Client API. Granted that the main Client class is a class and not an interface (and the fact that it is created via a static method) does not really aid in mocking it out.

What have people generally done when trying to mock this out?

Do you resort to using cglib to mock the class (instead of asm) and then go from there? or is there some sort of framework/API in Jersey that aids in this?

Thanks,

Ronak Patel




Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Unit Testing code that uses the Jersey Client API

Kevin Duffey
In reply to this post by Ronak Patel
I agree... we use jersey client (instead of httpclient) to run rest api integration tests. When we do a nightly build it runs unit tests then integration tests.


Sent from my ASUS Eee Pad

Ronak Patel &lt;[hidden email]&gt; wrote:

Hi Pavel,

Setting up and using the Jersey Test Framework seems more like an integration test to me rather than a unit test.
Same thing goes for using it to bring up a resource and then using the Jersey client to make REST calls.

They will require having databases set up with test data and so on just to make one unit test pass....
That seems rather excessive for a unit test (but totally okay for an integration test).

The Client class is not final and has a default constructor, so it seems cglib/EasyMock would work here.
I'll try it out and let you know how that goes.

Ronak


From: Pavel Bucek <[hidden email]>
To: [hidden email]
Sent: Thursday, December 8, 2011 5:40 AM
Subject: [Jersey] Re: Unit Testing code that uses the Jersey Client API

Hi,

I wouldn't try to mock jersey client, it looks like hard thing to do - it is too complex for this I think.

You have several options how to approach this:

1) using jersey test framework
    you should be able to create (or maybe reuse if you already have them) resources which could serve similarly as mocking. You might be able to use in memory container, so it would be fast. But this depends on the code you want to test - it might not be possible (for example, you'll need to have the possibility to use client provided by framework). And additionally, Jersey server (runtime dependencies) and related dependencies are needed for this to work.

2) hacking jersey client
    it is possible to subclass or modify jersey client to *not* actually call any rest service, all you need to do is implement your own TerminatingClientHandler, see [1] for example.

both proposed solutions require some additional code, but I like first option more..

I would like to know what path are you going to choose, so please keep us posted :)

Regards,
Pavel


[1] http://java.net/projects/jersey/sources/svn/content/trunk/jersey/jersey-test-framework/jersey-test-framework-inmemory/src/main/java/com/sun/jersey/test/framework/impl/container/inmemory/TestResourceClientHandler.java


On 12/7/11 7:15 PM, Ronak Patel wrote:
Hello,

I'm trying to write unit tests for code that uses the Jersey Client API. Granted that the main Client class is a class and not an interface (and the fact that it is created via a static method) does not really aid in mocking it out.

What have people generally done when trying to mock this out?

Do you resort to using cglib to mock the class (instead of asm) and then go from there? or is there some sort of framework/API in Jersey that aids in this?

Thanks,

Ronak Patel



Reply | Threaded
Open this post in threaded view
|  
Report Content as Inappropriate

Re: Unit Testing code that uses the Jersey Client API

Pavel Bucek-2
In reply to this post by Ronak Patel
On 12/8/11 3:28 PM, Ronak Patel wrote:
Hi Pavel,

Setting up and using the Jersey Test Framework seems more like an integration test to me rather than a unit test.
Same thing goes for using it to bring up a resource and then using the Jersey client to make REST calls.
I concur.

They will require having databases set up with test data and so on just to make one unit test pass....
That seems rather excessive for a unit test (but totally okay for an integration test).
well, not really. I meant that like having some kind of "fake" resources just for these tests - something like

@Path("..")
public class MyResource {
    @GET
    public MyType get(...) {
        // check request
        // return preconstructed response
    }
}

but you are definitely right about this not really being unit test ..

The Client class is not final and has a default constructor, so it seems cglib/EasyMock would work here.
I'll try it out and let you know how that goes.

ok, looking forward to your next post.

Regards,
Pavel


Ronak


From: Pavel Bucek [hidden email]
To: [hidden email]
Sent: Thursday, December 8, 2011 5:40 AM
Subject: [Jersey] Re: Unit Testing code that uses the Jersey Client API

Hi,

I wouldn't try to mock jersey client, it looks like hard thing to do - it is too complex for this I think.

You have several options how to approach this:

1) using jersey test framework
    you should be able to create (or maybe reuse if you already have them) resources which could serve similarly as mocking. You might be able to use in memory container, so it would be fast. But this depends on the code you want to test - it might not be possible (for example, you'll need to have the possibility to use client provided by framework). And additionally, Jersey server (runtime dependencies) and related dependencies are needed for this to work.

2) hacking jersey client
    it is possible to subclass or modify jersey client to *not* actually call any rest service, all you need to do is implement your own TerminatingClientHandler, see [1] for example.

both proposed solutions require some additional code, but I like first option more..

I would like to know what path are you going to choose, so please keep us posted :)

Regards,
Pavel


[1] http://java.net/projects/jersey/sources/svn/content/trunk/jersey/jersey-test-framework/jersey-test-framework-inmemory/src/main/java/com/sun/jersey/test/framework/impl/container/inmemory/TestResourceClientHandler.java


On 12/7/11 7:15 PM, Ronak Patel wrote:
Hello,

I'm trying to write unit tests for code that uses the Jersey Client API. Granted that the main Client class is a class and not an interface (and the fact that it is created via a static method) does not really aid in mocking it out.

What have people generally done when trying to mock this out?

Do you resort to using cglib to mock the class (instead of asm) and then go from there? or is there some sort of framework/API in Jersey that aids in this?

Thanks,

Ronak Patel




Loading...