.net - 如何发出具有两个仅在返回类型上重载的属性的 .NET 类型?

标签 .net moq autofixture

我需要创建一个具有两个同名属性的类型,并且仅在返回类型上有所不同。通过反射动态发射这种类型是完全可以接受的。

像这样的东西:

public TypeA Prop { get; }
public TypeB Prop { get; }

我明白我不能从 C# 或 VB.NET 或许多其他 .NET 语言使用这个属性。

为了避免向我解释为什么我不想这样做的答案,让我解释一下为什么我需要它:我需要它来重现错误。

更具体地说,我在 AutoFixture 中有一个错误哪里Moq在某些情况下,类型将导致它抛出异常。问题在于 Moq 发出的类型包含两个名为“Mock”的属性,它们仅在返回类型上有所不同。

我想在单元测试中重现这个场景,但我不想仅仅因为这个原因就依赖 Moq,所以我想在测试套件内部重现该行为。

最佳答案

您可以拥有 2 个名称相同但仅因类型不同而不同的属性,并且您可以在不动态发出类型的情况下执行此操作:

class Foo
{
    public string X
    {
        get { return "Hello world"; }
    }
}

class Bar : Foo
{
    public new int X
    {
        get { return 42; }
    }
}

void Main()
{
    foreach(PropertyInfo prop in typeof(Bar).GetProperties())
    {
        Console.WriteLine("{0} : {1}", prop.Name, prop.PropertyType);
    }
}

此代码的输出将是:

X : System.Int32
X : System.String

关于.net - 如何发出具有两个仅在返回类型上重载的属性的 .NET 类型?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1509098/

相关文章:

c# - 无法使用 Windows 服务从 odbc 连接(使用 dsn)打开数据库?

c# - 随机枚举生成

.net - 如何注册通用对象工厂?

testing - 我可以告诉 AutoFixture 为从它继承的类的所有实例调用一些基方法吗?

.NET - 浮点比较

c# - 使用 linq-to-entities 将字符串转换为日期时间的大问题

c# - 如何使用 moq 在 C# 中编写将接口(interface)属性映射到键值对的通用模拟

c# - 如何使用 Mock.Of<> 语法模拟在构造函数中具有参数的类?

c# - 删除字符串中特定字符后的字符,然后删除子字符串?

c# - 如何强制方法使用模拟?