Ir al contenido principal

Spring Boot - Testing

Frameworks

Spring-boot-starter-test

  • Always start with the starter 
  • Integrate the above frameworks

<dependency>
<groupId>org.springframework.boot</groupId>
<artifactId>spring-boot-starter-test</artifactId>
<scope>test</scope>
</dependency>

JUnit

  • For unit testing
Hamcrest


  • Matching and assertion

Mockito
  • Mock objects and verify

Spring Test

  • Testing tools & integration testing support


Creating a Test

First in src/test/java create the following class for test the Controller

package com.ericsson.project;

import org.junit.Test;

public class AppTest 
{
   @Test
    public void testApp()
    {


    }
}

  • Add the following code in testApp()
HomeController hc = new HomeController();
    String result = hc.home();
    assertEquals(result"Das boot");

Creating a Mockito Test

Mockito helps to inject dependencies
  • Create another test
  • Inject the controller
@InjectMocks
private ShipwreckController swc;
  • Inject the repository
@Mock
private ShipwreckRepository swr;

    • Initialize all the mock objects 
    @Before(value = "")
    public void nit(){
    MockitoAnnotations.initMocks(this);
    }
    • Create test method

    @Test
    public void testhipwreckGet(){
    Shipwreck sw = new Shipwreck();
    sw.setId(1L);
    when(swr.findOne(1l)).thenReturn(sw);
    Shipwreck sw2 = swc.get(1l);
    assertEquals(1l, sw2.getId().longValue());
    }

    • All Mockito Test




    package com.ericsson.project;

    import static org.junit.Assert.*;
    import static org.mockito.Mockito.*;

    import org.junit.Before;
    import org.junit.Test;
    import org.mockito.InjectMocks;
    import org.mockito.Mock;
    import org.mockito.MockitoAnnotations;

    import com.ericsson.project.controller.ShipwreckController;
    import com.ericsson.project.model.Shipwreck;
    import com.ericsson.project.repository.ShipwreckRepository;

    public class ShimpwreckControllerTest {

    @InjectMocks
    private ShipwreckController swc;
    @Mock
    private ShipwreckRepository swr;
    @Before
    public void nit(){
    MockitoAnnotations.initMocks(this);
    }
    @Test
    public void testhipwreckGet(){
    Shipwreck sw = new Shipwreck();
    sw.setId(1L);
    when(swr.findOne(1l)).thenReturn(sw);
    Shipwreck sw2 = swc.get(1l);
    assertEquals(1l, sw2.getId().longValue());
    }
    }


    • Using Hamcrest
    Has another syntax to create the matching

    assertThat(sw2.getId(), is(1l));  




    Create Integration Test

    To convert JUnit test in Integration Test

    • Annotate the tests with @RunWith( SpringJUnit4ClassRunner.class )
    • Add @SpringApplicationConfiguration( App.class ) 
    • Create the test method


    package com.ericsson.project;

    import java.util.List;

    import org.junit.Test;
    import org.junit.runner.RunWith;
    import org.springframework.beans.factory.annotation.Autowired;
    import org.springframework.boot.test.SpringApplicationConfiguration;
    import org.springframework.test.context.junit4.SpringJUnit4ClassRunner;

    import com.ericsson.project.model.Shipwreck;
    import com.ericsson.project.repository.ShipwreckRepository;

    import static org.hamcrest.MatcherAssert.assertThat;
    import static org.hamcrest.Matchers.*;

    @RunWith( SpringJUnit4ClassRunner.class )
    @SpringApplicationConfiguration( App.class ) 
    public class ShipwreckIntegrationTest {

    @Autowired
    private ShipwreckRepository swr;
    @Test
    public void Test(){
    List<Shipwreck> wrecks = swr.findAll();
    assertThatwrecks.size(), isgreaterThanOrEqualTo(0)));
    }
    }



    Create Web Integration Test

    Web Integration Test == calling Rest API 

    • Add the annotation  @WebIntegrationTest
    • Define the URL


    @RunWith( SpringJUnit4ClassRunner.class )
    @SpringApplicationConfiguration( App.class )
    @org.springframework.boot.test.WebIntegrationTest
    public class WebIntegrationTest {

    @Test
    public void testService() throws IOException{

    RestTemplate rt = new TestRestTemplate();
    ResponseEntity<String> response = rt.getForEntity("http://localhost:8080/api/v1/shipwrecks", String.class);

    assertThat(response.getStatusCode(), equalTo(HttpStatus.OK));

    ObjectMapper om = new ObjectMapper();
    JsonNode responseJson = om.readTree(response.getBody());

    assertThat(responseJson.isMissingNode(), is(false));
    assertThat(responseJson.toString(), equalTo("[]"));

    }
    }









    Comentarios

    Entradas populares de este blog

    C# Using tabs

    To use tabs in C# use the TabContainer element from AjaxControlToolkit Include AjaxControlToolkit  Include in the Web.config file, inside the tag <system.web> the following code  <pages>       <controls>         <add tagPrefix="ajaxCTK" namespace="AjaxControlToolkit" assembly="AjaxControlToolkit"/>       </controls>     </pages>   Include TabContainer element First  include TabContainer element that is the section where all the tabs will be displayed. <ajaxCTK:TabContainer ID="TabContainerUpdate" runat="server"                 Height="800"                 CssClass="ajax__tab_style"> </ajaxCTK:TabContainer> Second per each tab include the following code corresponding to each ...

    Rails - Basic Steps III

    pValidations Validations are a type of ActiveRecord Validations are defined in our models Implement Validations Go to   root_app/app/models Open files  *.rb for each model Mandatory field validates_presence_of   :field Ex:   validates_presence_of    :title Classes The basic syntax is class MyClass        @global_variable                def my_method              @method_variable        end end Create an instance myInstance = MyClass.new Invoke a mehod mc.my_method class() method returns the type of the object In Ruby, last character of method define the behavior If ends with a question -> return a boolean value If ends with an exclamation -> change the state of the object Getter / Setter method def global_variable       return @global_variable end ...

    Python create package

    Create a root folder Create a sub-folder "example_pkg" that contains the funtionallity packaging_tutorial/ example_pkg/ __init__.py In the root folder create the following structure  packaging_tutorial/ example_pkg/ __init__.py tests/ setup.py LICENSE README.md in the setup.py contains the configuration of the packages your package is found by find_packages() import setuptools with open ( "README.md" , "r" ) as fh : long_description = fh . read () setuptools . setup ( name = "example-pkg-YOUR-USERNAME-HERE" , # Replace with your own username version = "0.0.1" , author = "Example Author" , author_email = "author@example.com" , description = "A small example package" , long_description = long_description , long_description_content_type = "text/markdown" , url = "https://github.com/pypa/sam...