Visual Studio cho phép kiểm tra đơn vị các phương thức riêng tư thông qua lớp truy cập được tạo tự động. Tôi đã viết một bài kiểm tra về một phương thức riêng tư biên dịch thành công, nhưng nó thất bại trong thời gian chạy. Một phiên bản khá tối thiểu của mã và thử nghiệm là:
//in project MyProj
class TypeA
{
private List<TypeB> myList = new List<TypeB>();
private class TypeB
{
public TypeB()
{
}
}
public TypeA()
{
}
private void MyFunc()
{
//processing of myList that changes state of instance
}
}
//in project TestMyProj
public void MyFuncTest()
{
TypeA_Accessor target = new TypeA_Accessor();
//following line is the one that throws exception
target.myList.Add(new TypeA_Accessor.TypeB());
target.MyFunc();
//check changed state of target
}
Lỗi thời gian chạy là:
Object of type System.Collections.Generic.List`1[MyProj.TypeA.TypeA_Accessor+TypeB]' cannot be converted to type 'System.Collections.Generic.List`1[MyProj.TypeA.TypeA+TypeB]'.
Theo intellisense - và do đó tôi đoán trình biên dịch - đích là loại TypeA_Accessor. Nhưng trong thời gian chạy, nó là kiểu TypeA, và do đó danh sách thêm không thành công.
Có cách nào tôi có thể ngăn chặn lỗi này? Hoặc, có lẽ nhiều khả năng, những người khác có lời khuyên nào khác (tôi dự đoán có thể "không thử nghiệm phương pháp riêng tư" và "không có thử nghiệm đơn vị thao túng trạng thái của các đối tượng").