gpt4 book ai didi

c# - 单元测试内部属性的反射

转载 作者:太空狗 更新时间:2023-10-29 22:12:17 25 4
gpt4 key购买 nike

我有一个具有 2 个内部属性的公共(public)类 (TargetContainerDto)。一个枚举和一个包含该枚举值的类型。

我正在尝试对该类型进行单元测试,但遇到了问题。

internal enum TargetContainerType
{
Endpoint,
Group,
User,
UserGroup
}


internal TargetContainerType Type { get; set; }

这是我在测试类中的反射代码

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 具有比 Type 更多的属性,但它们是公共(public)的,因此可以测试它们。 iconURL 是在 TargetContainerDto 中定义的字符串,具体取决于类型。这是我的测试方法:

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");
}

当我需要设置类型值时,我在测试方法中调用了 setTypeTo,但我得到了一个 MethodAccessException。我认为这是因为我无权访问枚举。如何通过反射访问枚举?

谢谢

最佳答案

InternalsVisibleTo 属性标记您的程序集,您不需要在测试 dll 中使用反射。

例如在您的应用程序 dll 的 AssemblyInfo.cs 文件中添加以下行:

[assembly:InternalsVisibleTo("TestAssembly")]

参见 here了解更多详情。

关于c# - 单元测试内部属性的反射,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15830490/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com