juneau-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From Rasa V <fiamm...@gmail.com>
Subject Re: Mock test task
Date Tue, 17 Dec 2019 11:58:06 GMT
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
  • Unnamed multipart/related (inline, None, 0 bytes)
View raw message