84 votes

Tester unitairement les méthodes protégées de C#

Je viens du monde de Java EE mais maintenant je travaille sur un projet .Net. En Java, lorsque je voulais tester une méthode protégée, c'était assez facile, il suffisait d'avoir la classe de test avec le même nom de package.

Y a-t-il quelque chose de similaire pour C#? Y a-t-il une bonne pratique pour tester les méthodes protégées? J'ai seulement trouvé des frameworks et des personnes disant que je devrais tester uniquement les méthodes publiques.

Il devrait être possible de le faire sans aucun framework...

106voto

unarity Points 702

Vous pouvez hériter de la classe sur laquelle vous effectuez des tests dans votre classe de test.

[TestClass]
public class Test1 : SomeClass
{
    [TestMethod]
    public void MyTest
    {
        Assert.AreEqual(1, ProtectedMethod());
    }

}

40voto

Richard Points 14490

Une autre option consiste à utiliser internal pour ces méthodes, puis à utiliser InternalsVisibleTo pour permettre à votre assembly de test d'accéder à ces méthodes. Cela n'empêche pas les méthodes d'être consommées par d'autres classes dans le même assembly, mais les empêche d'être accessibles par d'autres assemblies qui ne sont pas votre assembly de test.

Cela ne vous offre pas autant d'encapsulation et de protection, mais c'est assez direct et peut être utile.

Ajoutez ceci à AssemblyInfo.cs dans l'assembly contenant les méthodes internes

[assembly: InternalsVisibleTo("TestsAssembly")]

35voto

typhon04 Points 303

Vous pouvez exposer les méthodes protégées dans une nouvelle classe qui hérite de la classe que vous souhaitez tester.

public class ExposedClassToTest : ClassToTest
{
    public bool ExposedProtectedMethod(int parameter)
    {
        return base.ProtectedMethod(parameter);
    }
}

8voto

Usama Aslam Points 159

Vous pouvez utiliser la classe PrivateObject pour accéder à toutes les méthodes/ champs privés/protégés.

PrivateObject est une classe du framework de tests unitaires de Microsoft qui est un wrapper qui permet d'appeler des membres normalement inaccessibles pour les tests unitaires.

6voto

Justin Harvey Points 6105

Vous pouvez utiliser la réflexion pour appeler des méthodes privées et protégées.

Voir ici pour plus d'informations :

http://msdn.microsoft.com/en-us/library/66btctbe.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X