Après quelques recherches ici, je pris les conseils de ce fil: How to unit test C# Web Service with Visual Studio 2008classe de tests unitaires dans un service Web en .net
J'ai créé une classe distincte et ma classe de service Web est juste une enveloppe pour que l'on . Le problème est que lorsque j'essaie de créer un projet de test unitaire dans VS2008, il insiste pour créer un test unitaire qui agit comme si je testais les appels de service Web au lieu de la classe que j'avais spécifiée. Je ne peux pas arriver à la classe que j'essaie de tester.
J'ai un service Web "subscription_api.asmx". Le code derrière est "subscription_api.cs" qui contient les appels de l'encapsuleur de la méthode web au code réel à "subscription.cs".
Je pense pouvoir faire ce qui suit:
[TestMethod()]
public void GetSystemStatusTest()
{
subscription sub = new subscription();
XmlNode node = sub.GetSystemStatusTest();
Assert.IsNotNull(node);
}
Mais au lieu-je obtenir ce gâchis qui est généré automatiquement à partir VS'08:
/// <summary>
///A test for GetSystemStatus
///</summary>
// TODO: Ensure that the UrlToTest attribute specifies a URL to an ASP.NET page (for example,
// http://.../Default.aspx). This is necessary for the unit test to be executed on the web server,
// whether you are testing a page, web service, or a WCF service.
[TestMethod()]
[HostType("ASP.NET")]
[AspNetDevelopmentServerHost("C:\\CVSROOT\\rnr\\pro\\product\\wms\\ss\\subscription_api", "/subscription_api")]
[UrlToTest("http://localhost/subscription_api")]
public void GetSystemStatusTest()
{
subscription_Accessor target = new subscription_Accessor(); // TODO: Initialize to an appropriate value
XmlNode expected = null; // TODO: Initialize to an appropriate value
XmlNode actual;
actual = target.GetSystemStatus();
Assert.AreEqual(expected, actual);
Assert.Inconclusive("Verify the correctness of this test method.");
}
De plus, il y a une « subscription_api .accessor "dans le dossier Références de test.
Quand j'essayez ceci:
[TestMethod()]
public void GetSystemStatusTest2()
{
subscription_Accessor sub = new subscription_Accessor();
XmlNode node = sub.GetSystemStatus();
Assert.IsNotNull(node);
}
Je reçois une erreur:
Test method subscription_api.Test.subscriptionTest.GetSystemStatusTest2 threw exception: System.TypeInitializationException: The type initializer for 'subscription_Accessor' threw an exception. ---> System.ArgumentNullException: Value cannot be null.
Je suis vraiment nouveau pour les tests unitaires et je me sens perdu. Comment puis-je créer un test unitaire juste pour ma classe d'abonnement dans "subscription.cs" sans tester le service web? Suis-je limité à tester dans le même projet (j'espère que non)? Dois-je mettre la classe cible dans son propre projet en dehors du projet de service Web?
OK, merci pour l'info. Une chose que j'ai oublié de mentionner, c'est que ce projet a été converti de VS'05 à VS'08 dans le but exprès de le rendre testable. –
Cela a fait l'affaire.VS'08 veut toujours créer des tests de service Web quand j'essaie d'autogénérer les tests unitaires, mais je peux créer les tests que je veux à la main et ils se comportent comme prévu. –
Génial. Personnellement, je souhaite qu'ils enlèvent tous les projets de type site Web de VS tous ensemble. ;) Content de pouvoir aider. –