Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/blackberry/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在抽象类模拟中包含具有[Key]的属性_C#_Moq_Xunit - Fatal编程技术网

C# 在抽象类模拟中包含具有[Key]的属性

C# 在抽象类模拟中包含具有[Key]的属性,c#,moq,xunit,C#,Moq,Xunit,我试图模拟(moqlib)一个抽象类(在本例中是X类)。在这个类中,它是一个被指定为[ForeignKey(“xId”)]的属性。这些类如下所示,我试图模拟这个X类 但我犯了个错误 System.NotSupportedException:'在非虚拟服务器上的安装无效 (在VB中可重写)成员:mock=>mock.SubX'' 有人知道模仿这种财产的最好方法是什么吗 public abstract class X { [ForeignKey("xId")] public SubX

我试图模拟(moqlib)一个抽象类(在本例中是X类)。在这个类中,它是一个被指定为
[ForeignKey(“xId”)]
的属性。这些类如下所示,我试图模拟这个X类

但我犯了个错误

System.NotSupportedException:'在非虚拟服务器上的安装无效 (在VB中可重写)成员:mock=>mock.SubX''

有人知道模仿这种财产的最好方法是什么吗

public abstract class X
{
   [ForeignKey("xId")]
   public SubX SubX {get; set;}
}

public class SubX
{
   [Key]
   public int Id {get; set;}
}

var mockedX = Mock.Of<X>(a => a.SubX.Id == 10);
公共抽象类X
{
[外键(“xId”)]
公共SubX SubX{get;set;}
}
公共类SubX
{
[关键]
公共int Id{get;set;}
}
var mockedX=Mock.Of(a=>a.SubX.Id==10);

使用从X继承的非抽象类:

class XMock : X
{
}

var mockedX = new XMock(); 

XY问题。你为什么一开始就想嘲笑这门课?如果你研究这个错误消息,会有很多相关的问题,你尝试过什么?我有一个类,它使用这个类作为回购的返回值。我需要模拟这个repo并使用这个类作为返回值_mockedXRepository.Setup(f=>f.GetX(It.isany您不应该模拟该类,如果您坚持这样做,那么您必须将该属性标记为
virtual
,正如例外情况所示。您应该做的是模拟包含返回派生类型
X
的合同成员的接口,以便它返回派生
X
.co的实例n测试数据。您不模拟返回值,而是模拟依赖项。您只需从模拟调用返回一个
new-DerivedFromX{SubX=new-SubX{Id=10}
。@ColinM这是遗留代码,我尽量不去碰它。太好了!您能将答案标记为正确答案吗?