Questa domanda è negli anni avanzati, ma ho pensato di condividere il mio modo di farlo.
Fondamentalmente, ho tutte le mie classi di unit test nell'assembly che stanno testando in uno spazio dei nomi 'UnitTest' sotto il 'default' per quell'assembly: ogni file di test è racchiuso in un:
#if DEBUG
...test code...
#endif
block, e tutto ciò significa che a) non viene distribuito in una versione eb) posso usare le dichiarazioni internal
/ Friend
level senza saltare il cerchio.
L'altra cosa che offre, più pertinente a questa domanda, è l'uso di partial
classi, che possono essere utilizzate per creare un proxy per testare metodi privati, quindi per esempio per testare qualcosa come un metodo privato che restituisce un valore intero:
public partial class TheClassBeingTested
{
private int TheMethodToBeTested() { return -1; }
}
nelle classi principali dell'assembly e nella classe di 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
Ovviamente, devi assicurarti di non utilizzare questo metodo durante lo sviluppo, anche se una build di rilascio presto indicherà una chiamata involontaria ad esso se lo fai.