Tôi có một lớp công khai (TargetContainerDto
) có 2 thuộc tính nội bộ. Một enum và một loại có chứa một giá trị từ enum đó.Phản ánh đối với các thuộc tính bên trong kiểm tra đơn vị
Tôi đang cố thử nghiệm đơn vị loại, nhưng tôi đang gặp sự cố.
internal enum TargetContainerType
{
Endpoint,
Group,
User,
UserGroup
}
internal TargetContainerType Type { get; set; }
Đây là mã phản chiếu của tôi trong lớp học thử nghiệm của tôi
public void setType(TargetContainerDto t, int val)
{
BindingFlags bf = BindingFlags.NonPublic | BindingFlags.Instance;
PropertyInfo pi = t.GetType().GetProperty("Type", bf);
pi.SetValue(t, val, null);
}
public TargetContainerDto setTypeTo(TargetContainerDto t, int val)
{
setType(t, val);
return t;
}
TargetContainerDto
có tính hơn Type, nhưng họ là công khai để thử nghiệm chúng là tốt. iconURL
là một chuỗi được xác định trong TargetContainerDto
tùy thuộc vào loại đó là gì. Đây là thử nghiệm của tôi:
public void DefaultSubGroupIcon()
{
var o1 = new TargetContainerDto
{
Id = 1234,
DistinguishedName = "1.1.1.1",
SubGroup = "test",
};
setType(o1, 3);
Assert.AreEqual(o1.IconUrl, "/App_Themes/Common/AppControl/Images/workstation1.png");
}
Tôi gọi setTypeĐể thử phương pháp khi tôi cần đặt kiểu chữ, nhưng tôi nhận được MethodAccessException
. Tôi nghĩ rằng đó là bởi vì tôi không có quyền truy cập vào enum. Làm thế nào tôi có thể truy cập enum thông qua sự phản ánh?
Cảm ơn
Chỉ cần tò mò - bạn đã bao giờ xem xét ngừng sử dụng phản xạ trong các bài kiểm tra để truy cập trạng thái nội bộ của các đối tượng trong thử nghiệm và thiết kế lại ứng dụng của bạn một chút? –
Bạn có thể đăng ngoại lệ không? Loại có giá trị được đặt trước hoặc là giá trị rỗng không? – Akku
Nhân tiện, tôi vừa thử nghiệm kịch bản của bạn và nó hoạt động tốt. Bạn có thể vui lòng cung cấp thêm chi tiết, không chỉ chi tiết ngoại lệ, nhưng định nghĩa lớp ** TargetContainerDto ** của bạn? Lớp cơ sở cho nó là gì? –