Cette question est dans ses années avancées, mais j'ai pensé partager ma façon de faire.
Fondamentalement, j'ai toutes mes classes de test unitaire dans l'assembly qu'ils testent dans un espace de noms 'UnitTest' sous le 'default' pour cet assembly - chaque fichier de test est enveloppé dans un:
#if DEBUG
...test code...
#endif
block, et tout cela signifie que a) il n'est pas distribué dans une version et b) je peux utiliser les déclarations internal
/ Friend
level sans sauter de cerceau.
L'autre chose que cela offre, plus pertinente pour cette question, est l'utilisation de partial
classes, qui peuvent être utilisées pour créer un proxy pour tester des méthodes privées, donc par exemple pour tester quelque chose comme une méthode privée qui renvoie une valeur entière:
public partial class TheClassBeingTested
{
private int TheMethodToBeTested() { return -1; }
}
dans les classes principales de l'assembly, et la classe de test:
#if DEBUG
using NUnit.Framework;
public partial class TheClassBeingTested
{
internal int NUnit_TheMethodToBeTested()
{
return TheMethodToBeTested();
}
}
[TestFixture]
public class ClassTests
{
[Test]
public void TestMethod()
{
var tc = new TheClassBeingTested();
Assert.That(tc.NUnit_TheMethodToBeTested(), Is.EqualTo(-1));
}
}
#endif
De toute évidence, vous devez vous assurer de ne pas utiliser cette méthode pendant le développement, bien qu'une version Release indiquera bientôt un appel par inadvertance si vous le faites.