Tests unitaires JUnit 4 sur webservice
Bonjour,
j'essaye de faire un test unitaire JUNIT4 sur un webservice REST
Voici mon webservice
Mon interface
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25
|
package com.quelquechose;
import javax.ws.rs.POST;
import javax.ws.rs.Path;
import javax.ws.rs.PathParam;
import javax.ws.rs.Produces;
import javax.ws.rs.core.MediaType;
import javax.ws.rs.core.Response;
import org.jboss.resteasy.annotations.Form;
@Path("cf")
public interface CapacityFileService
{
@POST
@Path("initsupplierst/{capacityFileId}")
@Produces(MediaType.APPLICATION_JSON)
public Response initSupplierShortTerm(@PathParam ("capacityFileId") Integer capacityFileId);
..........................
} |
Mon implementation
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44
|
@Stateless
@AppException
public class CapacityFileServiceImpl implements CapacityFileService
{
.........................................
@Override
public Response initSupplierShortTerm(Integer capacityFileId) {
PartsGroupingSearchDto partsGroupingSearchDto = new PartsGroupingSearchDto();
List<PartsGroupingSearchDto> allPartsDetail = null;
UserSession userSession = sessionManagerService.getUserSession(req);
if(userSession.isSupplier() || userSession.isAdmin()) {
partsGroupingSearchDto.setCfNumber(String.valueOf(capacityFileId));
String siteCode = capacityFileBusiness.getSiteCode(String.valueOf(capacityFileId));
partsGroupingSearchDto.setSiteCode(siteCode);
String serverPath = "http://"+req.getServerName()+":"+req.getServerPort()+"/quelquechose?siteCode=";
String object = directoryServiceBean.callService(serverPath+partsGroupingSearchDto.getSiteCode());
JSONObject personJson = new JSONObject(object);
JSONObject personJsonNew = null;
HashMap<String,String> userInfo = new HashMap<String,String>();
JSONArray userMap = (JSONArray) personJson.get(DcrConstant.USER_MAP);
for (int i = 0; i < userMap.length(); i++) {
personJsonNew= (JSONObject)userMap.get(i);
userInfo.put(personJsonNew.getString(DcrConstant.FIRST_NAME),personJsonNew.getString(DcrConstant.IPN));
}
allPartsDetail = capacityFileBusiness.initSupplierShortTerm(partsGroupingSearchDto,userInfo);
}
return Response.ok(allPartsDetail).build();
} |
Et voici mon test
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107
|
package com.renault.dcr.impl.capacityfile;
import javax.servlet.http.HttpServletRequest;
import javax.ws.rs.client.Entity;
import javax.ws.rs.client.WebTarget;
import javax.ws.rs.core.Application;
import javax.ws.rs.core.MediaType;
import org.glassfish.grizzly.http.server.HttpServer;
import org.glassfish.jersey.server.ResourceConfig;
import org.glassfish.jersey.test.JerseyTest;
import org.json.JSONArray;
import org.json.JSONObject;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
import org.mockito.Mockito;
import com.dcp.data.PartsGroupingData;
import com.dcp.data.dto.PartsGroupingSearchDto;
import com.dcp.data.dto.common.UserSession;
import com.dcp.util.common.DcrConstant;
import com.google.gson.Gson;
import com.renault.dcr.business.capacityfile.CapacityFileBusiness;
import com.renault.dcr.common.service.impl.session.DirectoryServiceBean;
import com.renault.dcr.common.service.session.SessionManagerService;
import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
import javax.ws.rs.core.Response;
public class CapacityFileServiceImplTest extends JerseyTest {
private HttpServer server;
private WebTarget target;
@Mock
private SessionManagerService sessionManagerService;
@Mock
private CapacityFileBusiness capacityFileBusiness;
@Mock
private DirectoryServiceBean directoryServiceBean;
@Mock
private HttpServletRequest req;
@Override
protected Application configure() {
return new ResourceConfig(CapacityFileServiceImpl.class);
}
PartsGroupingSearchDto partsGroupingSearchDto;
@Before
public void setUp() throws Exception {
HttpServer server = HttpServer.createSimpleServer();
server.start(); partsGroupingSearchDto = new PartsGroupingSearchDto();
// Client c = ClientBuilder.newClient();
// target = c.target(Main.BASE_URI);
}
@Test
public void initSupplierShortTermTest() {
UserSession userSession = new UserSession();
Mockito.when(sessionManagerService.getUserSession(req)).thenReturn(userSession);
Mockito.when(capacityFileBusiness.getSiteCode(String.valueOf("12345"))).thenReturn("SiteCode1");
partsGroupingSearchDto.setCfNumber(String.valueOf("12345"));
partsGroupingSearchDto.setSiteCode("SiteCode1");
Mockito.when(req.getServerName()).thenReturn("ServerName");
Mockito.when(req.getServerPort()).thenReturn(8000);
String object = "{ "+DcrConstant.USER_MAP+" : [{ \"firstName\" : \"Xavier\", \"ipn\": \"p078160\" }, { \"firstName\" : \"Mohamed\", \"ipn\": \"p075160\" }] }";
Mockito.when(directoryServiceBean.callService("http://ServerName:8000/quelquechose?siteCode=SiteCode1")).thenReturn(object);
JSONObject personJson = new JSONObject(object);
JSONObject personJsonNew = null;
HashMap<String,String> userInfo = new HashMap<String,String>();
JSONArray userMap = (JSONArray) personJson.get(DcrConstant.USER_MAP);
for (int i = 0; i < userMap.length(); i++) {
personJsonNew= (JSONObject)userMap.get(i);
userInfo.put(personJsonNew.getString(DcrConstant.FIRST_NAME),personJsonNew.getString(DcrConstant.IPN));
}
List<PartsGroupingSearchDto> allPartsDetail = new ArrayList<PartsGroupingSearchDto>();
PartsGroupingSearchDto partsGroupingSearchDto1 = new PartsGroupingSearchDto();
partsGroupingSearchDto1.setCfNumber("Number1");
allPartsDetail.add(partsGroupingSearchDto1);
PartsGroupingSearchDto partsGroupingSearchDto2 = new PartsGroupingSearchDto();
partsGroupingSearchDto2.setCfNumber("Number2");
allPartsDetail.add(partsGroupingSearchDto1);
Mockito.when(capacityFileBusiness.initSupplierShortTerm(partsGroupingSearchDto,userInfo)).thenReturn(allPartsDetail);
Gson gson = new Gson();
String jsonResult = gson.toJson(allPartsDetail);
final Response response = target("cf/initsupplierst").queryParam("capacityFileId", "12345").request(MediaType.APPLICATION_JSON)(.postEntity.json(jsonResult));
}
} |
Ma première question est : est ce que j'ai besoin d'un serveur (partie verte) et si oui, j'obtiens l'erreur suivante
Code:
1 2
|
java.net.BindException: Adresse already in use: bind |
Comment alors instancier un server avec une adresse non utilisée
Ma deuxième question est : est ce que mon appel de method (partie en rouge) du webservice est correct, en particulier est ce que la partie
Code:
1 2
|
postEntity.json(jsonResult) |
est correcte en prenant en compte le fait que "jsonResult" est la conversion d'une liste d'objet List<PartsGroupingSearchDto> allPartsDetail en JSON?
Merci d'avance pour vos réponses