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>
<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
- 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");
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());
}
}
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));
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();
assertThat( wrecks.size(), is( greaterThanOrEqualTo(0)));
}
}
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();
assertThat( wrecks.size(), is( greaterThanOrEqualTo(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
Publicar un comentario