我正在尝试提供一个模拟来帮助我测试:
ClaimsPrincipal princple = Thread.CurrentPrincipal as ClaimsPrincipal;
但是据我所知,“as”关键字返回 null,即使我可以在调试器中看到 Thread.CurrentPrincipal 是模拟。
为了检验理论,我整理了这个简短的演示:
void Main()
{
var userMock = new Mock<IUser>();
userMock.Setup(w => w.UserId).Returns(1);
var user = userMock.Object as User;
user.Dump(); // null
}
public interface IUser
{
int UserId { get; set; }
}
public class User : IUser
{
public int UserId { get; set; }
}
如何为在后台使用 as 关键字的代码提供最小起订量?
据我了解,也许我需要为代理提供一种回退的方式?
我有点意识到这是不可能的,但想知道人们解决这个问题的方法是什么。
当你创建模拟时
var userMock = new Mock<IUser>();
然后 Moq 动态创建实现 IUser
接口(interface)的类。该类与此接口(interface)的其他实现(如 User
类)无关。这就是为什么模拟对象是 IUser
而不是 User
的原因:
var user = userMock.Object as User; // will be null
我是一名优秀的程序员,十分优秀!