如何发出一个.NET类型,该类型有两个仅在返回类型上重载的属性?
我需要创建一个类型,该类型有两个同名属性,并且返回类型不同。通过反射动态发射这种类型是完全可以接受的 大概是这样的:如何发出一个.NET类型,该类型有两个仅在返回类型上重载的属性?,.net,moq,autofixture,.net,Moq,Autofixture,我需要创建一个类型,该类型有两个同名属性,并且返回类型不同。通过反射动态发射这种类型是完全可以接受的 大概是这样的: public TypeA Prop { get; } public TypeB Prop { get; } 我知道我不能从C#或VB.NET或许多其他.NET语言中使用此属性 为了避免回答我为什么不想这样做,让我解释一下为什么我需要它:我需要它来复制一个bug 更具体地说,我有一个bug,在某些情况下,某个类型的错误会导致它抛出异常。问题是Moq发出的类型包含两个名为“Mock
public TypeA Prop { get; }
public TypeB Prop { get; }
我知道我不能从C#或VB.NET或许多其他.NET语言中使用此属性
为了避免回答我为什么不想这样做,让我解释一下为什么我需要它:我需要它来复制一个bug
更具体地说,我有一个bug,在某些情况下,某个类型的错误会导致它抛出异常。问题是Moq发出的类型包含两个名为“Mock”的属性,它们只在返回类型上不同
我希望在单元测试中重现此场景,但我不希望仅仅因为这个原因而依赖Moq,因此我希望在测试套件中内部重现该行为。您可以有两个名称相同的属性,它们仅因类型不同而不同,并且您可以在不动态发出类型的情况下执行此操作:
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.Int32X:System.String
+1为“脚、瞄准、射击”类型的材料提供有效的理由:)这正是我复制bug所需要的。非常感谢:)