C# MVC : Remote Validation

Voici comment faire une validation particulière sur une propriété du model.
Exemple vérifier l’unicité du login dans la table des utilisateurs.

Pour cela dans le controleur UtilisateurControleur créer la méthode CheckUniqueLogin.
Cette méthode renvoie un type JsonResult

public JsonResult CheckUniqueLogin(string login)
 {
// requete base d’unicité du login
 int nblogin = GetNbLogin(login)</p>
if (nblogin  == 0)
 {
 return Json(true, JsonRequestBehavior.AllowGet);
 }
 else
 {
 return Json(“Ce login existe déjà”, JsonRequestBehavior.AllowGet);
 }
 }

Si le login n’existe pas , le Json retourné renvoie True sinon un message d’erreur.

Dans la classe du Model : UtilisateurModel
Sur la propriété Login rajouter l’attribut Remote avec le nom du controleur et la méthode à appeler pour la validation
[Remote(« CheckUniqueLogin », »Utilsateur »)]

D’autre paramètres sont disponible pour cet attribut, voir ici pour plus de détails :
http://msdn.microsoft.com/fr-fr/library/gg508808%28v=vs.98%29.aspx

De plus pour que cette validation fonctionne, il faut que la propriété Login possède aussi l’attribut [Required]

Liens du 06/03/2012

Au programme du MVC, de l’Asp.net, du Visual Studio 2011, du Jquery, des conseils ….

1- MVC -Web Api – Gestion des exceptions  http://weblogs.asp.net/cibrax/archive/2012/02/27/handling-exceptions-in-your-asp-net-web-api.aspx

2- Jquery Template/View Engine in Asp.net MVC http://www.codeproject.com/Articles/188467/Using-JavaScript-View-Engines-in-ASP-NET-MVC

3- ASP.NET MVC + Selenium + IISExpress http://stephenwalther.com/blog/archive/2011/12/22/asp-net-mvc-selenium-iisexpress.aspx

4- Integrating Javascript Unit Tests With Visual Studio http://stephenwalther.com/blog/archive/2010/12/20/integrating-javascript-unit-tests-with-visual-studio.aspx

5- 10 Essential Tools for building ASP.NET Websites http://stephenwalther.com/blog/archive/2010/11/22/10-essential-tools-for-building-asp-net-websites.aspx

6- Visual Studio 11 Beta: Using page inspector http://www.asp.net/mvc/tutorials/mvc-4/using-page-inspector-in-an-mvc-application-in-visual-studio-11-beta

7- 8 conseils pour jeunes developpeurs: http://pym.me/posts/8-conseils-pour-jeunes-developpeurs/

8- Preprocessor Directive in C#  http://www.codeproject.com/Articles/304175/Preprocessor-Directives-in-Csharp

9- Inside Visual Studio 11: A Guided Tour http://visualstudiomagazine.com/articles/2012/03/01/more-power.aspx

10- Asp.Net MVC 3 : Develop Hybrid Native and Mobile Web Apps http://msdn.microsoft.com/fr-fr/magazine/hh852592(en-us).aspx

C# : Les Tests unitaires – Part 4 (et fin) – Les Tests Unitaire et la base de données

Cette 4ème partie de cet article va expliquer comment faire des tests unitaires qui vont mettre à jour des enregistrements d’une base de données.

En effet, une des problématiques que j’ai rencontré, c’est comment exécuter des tests unitaires sans que mes tests ne soit persistants dans ma base de donnés SQL Serveur pour ne pas la faire grossir en volumétrie.

Pour ceci il faut utiliser  Une base de données dédiée pour les tests qui ne contient pas une grande volumétrie de données.

Le principe est d’utiliser Dans notre projet de Test Unitaire :

  • Un fichier Xsd qui contient le schéma de ma base : « Database/myTest.xsd »
  • Un fichier Xml qui va contenir les données de la bases, il est vide à l’origine : « XmlFiles/Contacts.xml »
  • Un fichier Xml qui contient les données à mettre à jour « Testdata/ContactData.xml »

Grace au fichier Xsd, les données de la base déjà présentes seront copiés dans le fichier Xml Contacts.Xml, puis nous allons mettre jour la base avec les données de notre fichiers Xml ContactData.xml pour faire nos tests unitaires avec.

Enfin, une fois le test terminé la base revient à son état d’origine grace au fichier Xml Contacts.xml.

Lire la suite

C# : Les Tests unitaires – Part 3 2/2 – Déploiement de fichiers et jeux de tests

Après le déploiement de fichiers, voici comment utiliser ces fichiers Xml deployés comme source de données pour faire des jeux de tests.

Voici notre test unitaire qui utilise notre fichier Xml

[DataSource("Microsoft.VisualStudio.TestTools.DataSource.XML", "|DataDirectory|\\NumbersData.xml",
"Number", DataAccessMethod.Sequential), DeploymentItem("DemosTestUnitaires.Test\\TestData\\NumbersData.xml"), TestMethod]
public void AdditionDeuxChiffresEtObtenirLaSomme_TestParFichierDeDonnees()
{
//Arrange
int c = int.Parse(TestContext.DataRow["c"].ToString());
int b = int.Parse(TestContext.DataRow["b"].ToString());
Calculatrice calculatrice = new Calculatrice();

int actualSomme = 10; //la somme de c et b
int expectedSomme = 0;

//Act
expectedSomme = calculatrice.Add(c, b);
Debug.WriteLine(DateTime.Now.TimeOfDay.ToString());
//Assert
Assert.IsTrue(expectedSomme <= actualSomme, c.ToString() + " + " + b.ToString());

}

Explication :

Les attributs :

  • DataSource : nom du provider (ici Xml) , chemin après déploiement du fichier xml, le nom de la table, méthode d’accès au données (ici séquentiel, ca peut être aussi aléatoire)
  • DeploymentItem : déploiement du fichier xml

Ces attributs peuvent être configurés automatiquement grâce à un assistant qui s’obtient en allant dans la liste des test de notre projet, cliquez sur la méthode de test désirée et dans la fenêtre des propriétés choisir « Data Connection String »

Exploitation des données :

Les données du datasource sont lues avec la méthode

TestContext.DataRow

int c = int.Parse(TestContext.DataRow["c"].ToString());
int b = int.Parse(TestContext.DataRow["b"].ToString());

Résultat du test:Avec ce fichier xml, le test est en SUCCES :

Par contre si dans le fichier xml on rajoute ce jeu de données :

<Number c="1" b="10" />

Dans ce cas le test est en Echec :

Remarque : comme vous pouvez le voir dans la fenêtre du résultat du test il y a le détail pour chaque élément du fichier xml. En fait la méthode du test unitaire est exécutée pour chaque ligne du fichier xml.

Voila pour cette partie, dans la 4eme partie de cet article, je montrerai comment faire des tests unitaires qui mettent à jour (ou insertion)  des enregistrements d’une base de données.

C# : Les Tests unitaires – Part 3 1/2 – Déploiement de fichiers et jeux de tests

Lors de l’exécution d’un test unitaire il est souvent utile de déployer des fichiers, comme par exemple des fichiers xml.

Ces fichiers xml contiendrons les données de tests, ainsi pour un même test il sera possible de l’exécuter avec plusieurs jeux de données, ce fichier xml est donc une DataSource pour le test.

Le problème c’est qu’un projet de tests unitaires ne se comporte pas comme un projet web il ne peut pas par default déployer des fichiers.

Cet article va donc expliquer comme déployer des fichiers puis comment automatiser l’exécution des tests avec le contenu des ces fichiers en l’utilisant comme une DataSource.

Le déploiement

Dans notre exemple, on va dans le projet créer un répértoire « TestData ».

Dans celui-ci on va créer un fichier xml « NumbersData.xml » avec comme contenu :

<Numbers>
<Number c="1" b="2" />
<Number c="1" b="3" />
<Number c="1" b="4" />
<Number c="1" b="5" />
<Number c="1" b="6" />
<Number c="1" b="7" />
<Number c="1" b="8" />
</Numbers></pre>

Tout d’abord, il faut configurer notre projet de tests unitaire à déployer des fichiers.

Lire la suite