Bonjour,

j'essaye de faire un test unitaire JUNIT4 sur un webservice REST

Voici mon webservice


Mon interface
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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 : Sélectionner tout - Visualiser dans une fenêtre à part
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