Classe Junit pour tester un Restful qui utilise @FormParam
j'ai un RESFUL et je souhaite le tester avec JUNIT et une page HTML en même temps
Pour la page HTML, je n'ai pas de problème, et quand j'envoi les données depuis JUNIT le RESFUL reçoit toujours la valeur null
Voici mon Resful
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
|
@Component
@Path("/dao")
public class RestServiceControllerImp implements RestServiceController
{
@POST
@Path("/test/")
@Consumes({
MediaType.APPLICATION_FORM_URLENCODED
,MediaType.MULTIPART_FORM_DATA
,MediaType.TEXT_HTML
,MediaType.TEXT_PLAIN
,MediaType.TEXT_XML
})
public Response getMessage(
@FormParam("dataInput") String dataInput
)
{
log.info("Message from getProductByID WS");
log.info("Valeur reçu en entrée :"+ServiceConstants.RETOUR_CHARIOT+dataInput);
if (dataInput == null)
{
result = "your value is null";
}
else
{
result = "your value :"+dataInput;
}
return Response.status(201).entity(result).build();
}
} |
Voici la page HTML
Code:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18
|
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<title>test</title>
</head>
<body>
<form action="http://localhost:8080/MyRestful/dao/test" method="POST" >
<textarea name="dataInput" rows="8" cols="50">
Hello World
</textarea>
<p>
<input type ="submit" value="Send"/>
</p>
</form>
</body>
</html> |
voici le log quand je lance depuis la page HTML
Code:
1 2 3 4
|
[http-bio-8080-exec-2] INFO com.myresful.rest.controller.RestServiceControllerImp - Message from getProductByID WS
[http-bio-8080-exec-2] INFO com.myresful.rest.controller.RestServiceControllerImp - Valeur reçu en entrée :
Hello World |
voici la classe Junit de 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
|
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration("classpath:applicationContext_Test.xml")
// @ContextConfiguration("classpath:applicationContext.xml")
@TransactionConfiguration(transactionManager = "transactionManager", defaultRollback = false)
@FixMethodOrder(MethodSorters.NAME_ASCENDING)
public class TestUnitRest
{
@Autowired
private BoxControlUnitDao objBoxControlUnitDao;
private Logger log = LoggerFactory.getLogger(TestUnitRest.class);
private String userName ;
private String userPwd ;
private String urlToConnect ;
private String responseMsg = "";
private String dataInput;
@Test
public void test01GetMessageFromRestful() throws Exception
{
log.info("*****************************test01GetMessageFromRestful******************");
userName = "nizar";
userPwd = "nizar123";
log.info("*****************************Génération de l'url******************");
urlToConnect = "http://localhost:8080/MyRestful/dao/test";
log.info("Url appelé : "+urlToConnect);
AutenticateFactory objAutenticateFactory = new AutenticateFactory(urlToConnect, userName, userPwd);
dataInput ="Hello World";
responseMsg = objAutenticateFactory.putMessage(dataInput);
log.info("Réception du retour :"+"\n"+responseMsg);
if (responseMsg.startsWith("your value is null"))
{
fail(
"L'appel du : "+urlToConnect +" à renvoyé :"+
"\n"+
responseMsg
);
}
else
{
log.info(
"Réponse reçu OK" +
"\n"+
"-----contenu de la réponse------" +
"\n" +
responseMsg+
"\n" +
"-----fin------"
);
}
}
} |
voici le log depuis le Restful quand je lance depuis junit
Code:
1 2 3 4
|
[http-bio-8080-exec-6] INFO com.MyResful.rest.controller.RestServiceControllerImp - Message from getProductByID WS
[http-bio-8080-exec-6] INFO com.MyResful.rest.controller.RestServiceControllerImp - Valeur reçu en entrée :
null |
pour préciser j'utilise une classe d'authentification
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
|
public class AutenticateFactory
{
static Logger log = LoggerFactory.getLogger(AutenticateFactory.class);
String urlToConnect;
String userName;
String userPwd;
String msgResponse;
int statusResponse;
private com.sun.jersey.api.client.WebResource webResource;
private com.sun.jersey.api.client.Client client;
public AutenticateFactory(String urlToConnect, String userName,String userPwd)
{
super();
this.urlToConnect = urlToConnect;
this.userName = userName;
this.userPwd = userPwd;
com.sun.jersey.api.client.config.ClientConfig config = new com.sun.jersey.api.client.config.DefaultClientConfig();
// Déclaration du client
client = com.sun.jersey.api.client.Client.create(config);
client.addFilter(new LoggingFilter());
client.addFilter(new com.sun.jersey.api.client.filter.HTTPBasicAuthFilter(userName, userPwd));
// Déclaration du web ressource
webResource = client.resource(urlToConnect);
}
public String getUrlToConnect() {
return urlToConnect;
}
public void setUrlToConnect(String urlToConnect) {
this.urlToConnect = urlToConnect;
}
public String getUserName() {
return userName;
}
public void setUserName(String userName) {
this.userName = userName;
}
public String getUserPwd() {
return userPwd;
}
public void setUserPwd(String userPwd) {
this.userPwd = userPwd;
}
public String getMessage() throws Exception
{
try
{
ClientResponse response = webResource.type(javax.ws.rs.core.MediaType.TEXT_HTML).get(ClientResponse.class);
statusResponse = response.getStatus();
msgResponse = response.getEntity(String.class);
// Vérifier le retour de la requete
if (statusResponse != HttpURLConnection.HTTP_OK)
{
throw (new Exception(
ServiceConstants.HTTP_ERR_CODE+ statusResponse +
ServiceConstants.RETOUR_CHARIOT+ msgResponse
));
}
}
catch (Exception err)
{
msgResponse = ServiceConstants.HTTP_ERR_CODE+ statusResponse +
ServiceConstants.RETOUR_CHARIOT+ err.getMessage();
}
client.destroy();
return msgResponse ;
}
public String putMessage(String inputValue) throws Exception
{
try
{
ClientResponse response = webResource.type(javax.ws.rs.core.MediaType.TEXT_HTML).post(ClientResponse.class, inputValue);
statusResponse = response.getStatus();
msgResponse = response.getEntity(String.class);
// Vérifier le retour de la requete
if (statusResponse != HttpURLConnection.HTTP_CREATED)
{
throw (new Exception(
ServiceConstants.HTTP_ERR_CODE+ statusResponse +
ServiceConstants.RETOUR_CHARIOT+ msgResponse
));
}
}
catch (Exception err)
{
/*msgResponse = ServiceConstants.HTTP_ERR_CODE+ statusResponse +
ServiceConstants.RETOUR_CHARIOT+ err.getMessage();*/
msgResponse = err.getMessage();
}
client.destroy();
return msgResponse ;
}
} |
pourquoi je reçoi la valeur null quand je lance depuis Junit ?
comment avoir la même valeur comme depuis la apage HTML ?
Merci !