Câu hỏi này đã có trong những năm cao cấp, nhưng tôi nghĩ tôi sẽ chia sẻ cách làm của mình.
Về cơ bản, tôi có tất cả các lớp thử nghiệm đơn vị của mình trong hợp ngữ mà chúng đang thử nghiệm trong không gian tên 'UnitTest' bên dưới 'mặc định' cho hợp ngữ đó - mỗi tệp thử nghiệm được bao bọc trong một:
#if DEBUG
...test code...
#endif
và tất cả điều đó có nghĩa là a) nó không được phân phối trong một bản phát hành và b) Tôi có thể sử dụng internal
/Friend
khai báo cấp mà không cần nhảy vòng.
Điều khác mà điều này cung cấp, phù hợp hơn với câu hỏi này, là việc sử dụng các partial
lớp, có thể được sử dụng để tạo proxy để kiểm tra các phương thức riêng tư, vì vậy, ví dụ để kiểm tra một cái gì đó như phương thức riêng trả về một giá trị nguyên:
public partial class TheClassBeingTested
{
private int TheMethodToBeTested() { return -1; }
}
trong các lớp chính của assembly và lớp thử nghiệm:
#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
Rõ ràng, bạn cần đảm bảo rằng bạn không sử dụng phương pháp này trong khi phát triển, mặc dù bản dựng Bản phát hành sẽ sớm chỉ ra một lệnh gọi vô tình đến nó nếu bạn làm vậy.