Pertanyaan ini ada di tahun-tahun yang sudah lanjut, tetapi saya pikir saya akan membagikan cara saya melakukan ini.
Pada dasarnya, saya memiliki semua kelas pengujian unit saya dalam rakitan yang mereka uji dalam ruang nama 'UnitTest' di bawah 'default' untuk rakitan itu - setiap file uji dibungkus dalam:
#if DEBUG
...test code...
#endif
memblokir, dan semua itu berarti bahwa a) itu tidak didistribusikan dalam rilis dan b) saya dapat menggunakan internal
/ Friend
level deklarasi tanpa lompatan lingkaran.
Hal lain yang ditawarkan ini, yang lebih berkaitan dengan pertanyaan ini, adalah penggunaan partial
kelas, yang dapat digunakan untuk membuat proxy untuk menguji metode privat, jadi misalnya untuk menguji sesuatu seperti metode privat yang mengembalikan nilai integer:
public partial class TheClassBeingTested
{
private int TheMethodToBeTested() { return -1; }
}
di kelas utama assembly, dan kelas pengujian:
#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
Jelas, Anda perlu memastikan bahwa Anda tidak menggunakan metode ini saat mengembangkan, meskipun rilis build akan segera menunjukkan panggilan yang tidak disengaja jika Anda melakukannya.