คำถามนี้อยู่ในช่วงหลายปีที่ผ่านมา แต่ฉันคิดว่าฉันจะแบ่งปันวิธีการทำเช่นนี้
โดยทั่วไปฉันมีคลาสทดสอบหน่วยทั้งหมดของฉันในแอสเซมบลีซึ่งกำลังทดสอบในเนมสเปซ 'UnitTest' ด้านล่าง 'ค่าเริ่มต้น' สำหรับแอสเซมบลีนั้น - ไฟล์ทดสอบแต่ละไฟล์จะถูกรวมไว้ใน:
#if DEBUG
...test code...
#endif
บล็อกและทั้งหมดนั้นหมายความว่า a) ไม่มีการแจกจ่ายในรุ่นและ b) ฉันสามารถใช้internal
/ Friend
การประกาศระดับโดยไม่ต้องกระโดดห่วง
สิ่งอื่นที่นำเสนอซึ่งเกี่ยวข้องกับคำถามนี้มากขึ้นคือการใช้partial
คลาสซึ่งสามารถใช้เพื่อสร้างพร็อกซีสำหรับการทดสอบเมธอดส่วนตัวตัวอย่างเช่นเพื่อทดสอบบางอย่างเช่นเมธอดส่วนตัวที่ส่งคืนค่าจำนวนเต็ม:
public partial class TheClassBeingTested
{
private int TheMethodToBeTested() { return -1; }
}
ในคลาสหลักของแอสเซมบลีและคลาสทดสอบ:
#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
เห็นได้ชัดว่าคุณต้องตรวจสอบให้แน่ใจว่าคุณไม่ได้ใช้วิธีนี้ในขณะที่กำลังพัฒนาแม้ว่ารุ่น Release จะระบุว่ามีการเรียกใช้โดยไม่ได้ตั้งใจในไม่ช้าหากคุณทำ