【发布时间】:2018-11-22 11:46:59
【问题描述】:
我正在使用Moq,我意识到在这种情况下,我遇到了需要帮助的Ambiguous match found 异常:
这是我的模型:
public class User
{
}
public class CustomUser
{
}
一些类:
public class BaseClass
{
public virtual User User { get; set; }
}
public class Father : BaseClass
{
public virtual new CustomUser User { get; set; }
}
public class Child : Father
{
}
最后:
void Main()
{
var user = new Mock<CustomUser>();
var child = new Mock<Child>();
child.SetupGet(x=>x.User).Returns (user.Object); // Ambiguous match found.
}
更新:
我为什么用这个?!
因为我正在编码MVC-WebAPI,而我有一个BaseController,它继承了ApiController。
好的,在 ApiController 中,我们有一个 IPrincipal User 属性,我用我的 ICustomPrinciple 实现 (this link) 覆盖了它。
现在我想模拟例如ProductController : BaseController。
var controller = new Mock<ProductController>();
var user = new Mock<CustomPrincipal>();
user.SetupGet(x => x.FullName).Returns("some full name");
controller.SetupGet(x => x.UserRoleID).Returns(81);// UserRoleID is getter and I do some stuff here.
controller.SetupGet(x => x.User).Returns(user.Object);
任何帮助将不胜感激。
【问题讨论】:
-
这些类显示糟糕的设计让我相信这是一个XY problem。为什么
Father更改基本属性? (解释一下,这样我才能更好地理解你想要做什么)。测试某些东西的困难通常表明原始设计存在问题 -
@Nkosi 帖子已更新。
-
应该永远不需要模拟控制器。你到底想达到什么目的?您应该能够创建控制器实例并设置用户。
-
@Nkosi 如果我有一个从请求或其他来源获取一些数据的
getter属性,那么我有更多问题。 -
这就是为什么您应该向我们展示您实际尝试做的事情,以便我们了解实际问题。
标签: c# inheritance mocking moq ambiguous