juneau-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From James Bognar <jamesbog...@apache.org>
Subject Re: Mock test task
Date Tue, 17 Dec 2019 16:49:14 GMT
Hi Rasa,

You'll want to put these tests under juneau-petstore-server/src/test/java.
The juneau-petstore-api defines the common beans used by both the server
and client projects.  You're specifically testing the server project so the
tests should go in that project

Your test class shouldn't contain @Rest or @RestResource at all.  Instead
it should just be referencing PetStoreResource which has that annotation.

If you're stuck, go ahead and submit a pull request with what you've got
and I can help out.


On Tue, Dec 17, 2019 at 6:58 AM Rasa V <fiammara@gmail.com> wrote:

> I am stuck in many places. Almost all rest tests fail.
> What is more, I don`t know where to put @Rest or @RestResource annotation
> after removing static rest class.
> And where is the best place for the src/test/java catalogue:
> juneau-petstore-api or juneau-petstore-server? Do I need separate pom.xml
> for the tests?
>
> 2019-12-16, pr, 08:24 Rasa V <fiammara@gmail.com> rašė:
>
>> Thank you. I will try to fix everything.
>>
>> 2019-12-14, št, 22:32 James Bognar <jamesbognar@apache.org> rašė:
>>
>>> One other useful note.  If you add debug="true" to the @Rest annotation
>>> on the PetStoreResource class, the HTTP request/response will be printed on
>>> the console which can be quite helpful in debugging issues.
>>>
>>>
>>> ---------- Forwarded message ---------
>>> From: James Bognar <jamesbognar@apache.org>
>>> Date: Sat, Dec 14, 2019 at 3:27 PM
>>> Subject: Re: Mock test task
>>> To: Rasa V <fiammara@gmail.com>
>>> Cc: Ayeshmantha Perera <akayeshmantha@gmail.com>, <dev@juneau.apache.org
>>> >
>>>
>>>
>>> Hi Rasa,
>>>
>>> I have suggestions on your pull request.
>>>
>>> You should be testing against the actual REST class itself instead of
>>> creating pieces of it in your test (e.g. UpdatePetMockRest).  SpringRunner
>>> allows you to get access to the real Spring bean via auto-wiring, like so:
>>>
>>>
>>>
>>> *   @RunWith(SpringRunner.class)
>>>  @ContextConfiguration(classes=App.class)*
>>> *@SpringBootTest*
>>>
>>> *public class PetStoreTest {   *   *@Autowired *
>>>       *PetStoreResource petStoreResource;*
>>>
>>>       *MockRest petStoreRest;*
>>>
>>>       *@Before*
>>>       *public void setup() {*
>>>         * petStoreRest =
>>> MockRest.create(petStoreResource).simpleJson().build();*
>>>       *}*
>>>    *}*
>>>
>>> Then just use that petStoreRest object in all of your tests.
>>>
>>> The MockRest class doesn't use Juneau serializers/parsers.  It just
>>> expects you to work with raw string input and output.  So the following
>>> won't work because it's just going to convert the CreatePet object to a
>>> String using toString():
>>>
>>>    *// Won't work*
>>>    *petStoreRest.post("/petstore/pet",
>>> pet).execute().assertStatus(200).assertBody(pet.toString());*
>>>
>>> Instead, you'll want something like this:
>>>
>>>
>>> *@Test*
>>> *public void testCreatePet() throws Exception {  *   * petStoreRest*
>>>        *  .post("/petstore/pet",
>>> "{name:'Sunshine',price:100.0,species:'BIRD'}")*
>>>             *.execute()*
>>>           *  .assertStatus(200)*
>>>            * .assertBody("1");  // Returns the auto-generated ID*
>>>
>>> *}*
>>>
>>> Note that you could use this approach if you defined this method on the
>>> CreatePet class:
>>>
>>> *public String toString() {  *   * return
>>> SimpleJson.DEFAULT.toString(this);*
>>>    *}*
>>>
>>> But usually I just keep it simple and deal with just plain strings.
>>>
>>> One last note:  Your test class should be placed in src/test/java.  This
>>> is standard convention and allows your dependencies to be pulled in using
>>> only test scope:
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>>
>>> *        <!-- Mock rest test -->        <dependency>
>>>  <groupId>org.apache.juneau</groupId>
>>>  <artifactId>juneau-rest-mock</artifactId>
>>>  <version>8.1.2</version>           <scope>test</scope>
>>> </dependency>        <dependency>           <groupId>junit</groupId>
>>>    <artifactId>junit</artifactId>           <scope>test</scope>
>>> </dependency>        <dependency>
>>>  <groupId>org.springframework.boot</groupId>
>>>  <artifactId>spring-boot-starter-test</artifactId>
>>>  <scope>test</scope>         </dependency>*
>>>
>>> On Sat, Dec 14, 2019 at 1:51 AM Rasa V <fiammara@gmail.com> wrote:
>>>
>>>> Pull request sent.
>>>>
>>>> 2019-12-14, št, 08:19 Ayeshmantha Perera <akayeshmantha@gmail.com>
>>>> rašė:
>>>>
>>>>> Hi Rasa
>>>>>
>>>>> Send the PR after removing the commented mock tests.
>>>>>
>>>>> On Fri 13. Dec 2019 at 14:46, Rasa V <fiammara@gmail.com> wrote:
>>>>>
>>>>>> I dont`understand. Which mock test calls I should remove?
>>>>>>
>>>>>> 2019-12-13, pn, 12:28 Ayeshmantha Perera <akayeshmantha@gmail.com>
>>>>>> rašė:
>>>>>>
>>>>>>> Hi Rasa.Send a PR remove all the commented code and I saw a dummy
>>>>>>> mock test call ok remove it as well
>>>>>>>
>>>>>>> Great work done
>>>>>>>
>>>>>>>
>>>>>>> On Fri 13. Dec 2019 at 11:21, Rasa V <fiammara@gmail.com>
wrote:
>>>>>>>
>>>>>>>> I have pushed my code into a new branch:
>>>>>>>> https://github.com/fiammara/juneau-petstore/tree/mock
>>>>>>>> Posting pets doesn`t work, so this test also fails to run.
>>>>>>>> You can check if i should correct something or I can do a
pull
>>>>>>>> request.
>>>>>>>>
>>>>>>>> 2019-12-13, pn, 12:01 Rasa V <fiammara@gmail.com> rašė:
>>>>>>>>
>>>>>>>>> Thanks. It works.
>>>>>>>>>
>>>>>>>>> 2019-12-12, kt, 17:40 James Bognar <jamesbognar@apache.org>
rašė:
>>>>>>>>>
>>>>>>>>>> If the REST class your testing is a Spring bean with
injected
>>>>>>>>>> fields, then using SpringRunner should work.  You
get access to the bean
>>>>>>>>>> instance through autowiring.  So something like this....
>>>>>>>>>>
>>>>>>>>>> @RunWith(SpringRunner.class)
>>>>>>>>>> @ContextConfiguration(classes = { App.class })
>>>>>>>>>> @SpringBootTest()
>>>>>>>>>> public class MyRestTest {
>>>>>>>>>>
>>>>>>>>>>     @Autowired
>>>>>>>>>>     MyRestClass restClass;
>>>>>>>>>>
>>>>>>>>>>     @Test
>>>>>>>>>>     public void myTest() throws Exception {
>>>>>>>>>>         MockRest mr = MockRest.create(restClass);
>>>>>>>>>>         mr.get("").execute().assertStatus(200);
>>>>>>>>>>     }
>>>>>>>>>> }
>>>>>>>>>>
>>>>>>>>>> On Thu, Dec 12, 2019 at 10:24 AM Rasa V <fiammara@gmail.com>
>>>>>>>>>> wrote:
>>>>>>>>>>
>>>>>>>>>>> Thank you. I have almost finished writing MockTest
class.  Which
>>>>>>>>>>> annotation should I add for running tests? SpringRunner
or something else?
>>>>>>>>>>>
>>>>>>>>>>> 2019-12-12, kt, 16:56 James Bognar <jamesbognar@apache.org>
>>>>>>>>>>> rašė:
>>>>>>>>>>>
>>>>>>>>>>>> HTTP GET requests do not typically have a
request body.
>>>>>>>>>>>> They're meant to pull data, not push.
>>>>>>>>>>>>
>>>>>>>>>>>> However, you can use the generic request()
methods to do it
>>>>>>>>>>>> anyway:
>>>>>>>>>>>> MockRest.request("GET", path, body)
>>>>>>>>>>>>
>>>>>>>>>>>> On Thu, Dec 12, 2019 at 1:13 AM Rasa V <fiammara@gmail.com>
>>>>>>>>>>>> wrote:
>>>>>>>>>>>>
>>>>>>>>>>>>> Thank you. I have one more question.
How do you pass @Body
>>>>>>>>>>>>> parameters (an Object) into GET method?
MockRest Get has only one
>>>>>>>>>>>>> parameter, the path.
>>>>>>>>>>>>>
>>>>>>>>>>>>> 2019-12-11, tr, 22:18 James Bognar <jamesbognar@apache.org>
>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>
>>>>>>>>>>>>>> The annotation on your REST class
should include the
>>>>>>>>>>>>>> following:
>>>>>>>>>>>>>> @RestResource(serializers=JsonSerializer.class,
>>>>>>>>>>>>>> parsers=JsonParser.class)
>>>>>>>>>>>>>>
>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 2:21 PM Rasa
V <fiammara@gmail.com>
>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> I tried to keep Json serializer
annotation, but I get an
>>>>>>>>>>>>>>> error message saying that Json
serializer cannot be resolved as a type.
>>>>>>>>>>>>>>> Import doesn`t help here.
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>> 2019-12-11, tr, 19:43 James Bognar
<jamesbognar@apache.org>
>>>>>>>>>>>>>>> rašė:
>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> @RestResource-annotated methods
can return any POJO.  That
>>>>>>>>>>>>>>>> POJO is converted to the
body of the HTTP response based on the Juneau
>>>>>>>>>>>>>>>> Serializer that matches the
Accept header on the incoming request (e.g.
>>>>>>>>>>>>>>>> "Accept: application/json")
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>> On Wed, Dec 11, 2019 at 6:29
AM Rasa V <fiammara@gmail.com>
>>>>>>>>>>>>>>>> wrote:
>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> Hello. I have one question
about @Rest method. Should it
>>>>>>>>>>>>>>>>> always return String
or the type is not important here?
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>> 2019-12-11, tr, 09:06
Rasa V <fiammara@gmail.com> rašė:
>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> I will try to fix
the documentation when I finish writing
>>>>>>>>>>>>>>>>>> tests.
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>> 2019-12-10, an, 22:58
James Bognar <
>>>>>>>>>>>>>>>>>> jamesbognar@apache.org>
rašė:
>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> Bonus points
if you can verify and fix that in the
>>>>>>>>>>>>>>>>>>> documentation!
 I see this mistake in the Javadocs of the MockRest class.
>>>>>>>>>>>>>>>>>>> The same mistake
might exist elsewhere.
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> On Tue, Dec 10,
2019 at 12:01 PM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com>
wrote:
>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Yes I think
its already there in the doc James pointed
>>>>>>>>>>>>>>>>>>>> previously.
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> Thanks alot
James
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>> On Tue 10.
Dec 2019 at 17:57, James Bognar <
>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org>
wrote:
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Ah.
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> Replace
create(MyRest.class) with build(MyRest.class).
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> On Tue,
Dec 10, 2019 at 4:28 AM Ayeshmantha Perera <
>>>>>>>>>>>>>>>>>>>>> akayeshmantha@gmail.com>
wrote:
>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Hi
Rasa and James
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> I
just came back from a business trip. Sorry to
>>>>>>>>>>>>>>>>>>>>>> attend
this lately. James am attaching the screenshot and sending again
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> Regards
>>>>>>>>>>>>>>>>>>>>>> Ayesh
>>>>>>>>>>>>>>>>>>>>>> [image:
Screenshot from 2019-12-04 17-05-36.png]
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> On
Wed, Dec 4, 2019 at 4:26 PM James Bognar <
>>>>>>>>>>>>>>>>>>>>>> jamesbognar@apache.org>
wrote:
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
Hi Rasa,
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
Unfortunately Apache mail does not support images so
>>>>>>>>>>>>>>>>>>>>>>>
I can't actually
>>>>>>>>>>>>>>>>>>>>>>>
see the error.
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
There's a section in the documentation on the Mock
>>>>>>>>>>>>>>>>>>>>>>>
REST interface:
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
http://juneau.apache.org/site/apidocs-8.1.2/overview-summary.html#juneau-rest-mock
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
The general idea behind them is to allow you to
>>>>>>>>>>>>>>>>>>>>>>>
execute simulated HTTP
>>>>>>>>>>>>>>>>>>>>>>>
requests against a REST endpoint without the need
>>>>>>>>>>>>>>>>>>>>>>>
for a servlet
>>>>>>>>>>>>>>>>>>>>>>>
container.   I recommend trying out the examples in
>>>>>>>>>>>>>>>>>>>>>>>
the documentation
>>>>>>>>>>>>>>>>>>>>>>>
(a useful exercise to validate the documentation as
>>>>>>>>>>>>>>>>>>>>>>>
well).
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>>
On Wed, Dec 4, 2019 at 10:17 AM Rasa V <
>>>>>>>>>>>>>>>>>>>>>>>
fiammara@gmail.com> wrote:
>>>>>>>>>>>>>>>>>>>>>>>
>
>>>>>>>>>>>>>>>>>>>>>>>
> Hello. I just started writing a mock test. I don`h
>>>>>>>>>>>>>>>>>>>>>>>
have much experience writing integration test. But I am trying to learn. I
>>>>>>>>>>>>>>>>>>>>>>>
wrote some code and would like to be sure I am doing it correctly. I send
>>>>>>>>>>>>>>>>>>>>>>>
you a screenshot. Here you can see that I am stuck with MockRest put
>>>>>>>>>>>>>>>>>>>>>>>
method. I don`t know why do I get an error saying that The method
>>>>>>>>>>>>>>>>>>>>>>>
put(String, UpdatePet) is undefined for the type MockRest.Builder.
>>>>>>>>>>>>>>>>>>>>>>>
> Maybe do you have some good examples of Juneau
>>>>>>>>>>>>>>>>>>>>>>>
mock tests?
>>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>>>> *Software
Engineer*
>>>>>>>>>>>>>>>>>>>>>> *Salzburg
Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>>>> *Salzburg,
Austria*
>>>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>>>> --
>>>>>>>>>>>>>>>>>>>> *Software
Engineer*
>>>>>>>>>>>>>>>>>>>> *Salzburg
Research Forschungsgesellschaft *
>>>>>>>>>>>>>>>>>>>> *Salzburg,
Austria*
>>>>>>>>>>>>>>>>>>>>
>>>>>>>>>>>>>>>>>>> --
>>>>>>> *Software Engineer*
>>>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>>>> *Salzburg, Austria*
>>>>>>>
>>>>>> --
>>>>> *Software Engineer*
>>>>> *Salzburg Research Forschungsgesellschaft *
>>>>> *Salzburg, Austria*
>>>>>
>>>>

Mime
View raw message