我有一个相当简单的问题。我只是试图测试asp.net Identity的UserStore方法,并在我的测试中使用它。本质上,目标只是创建一个模拟用户存储(在内存中),插入一个虚拟用户并验证插入是否成功。
[Test]
public void Can_Create_User()
{
var identityResult = Task.FromResult(new IdentityResult());
var user = new ApplicationUser() { UserName = "Andy", Email = "andy@andy.com" };
var store = new Mock<UserStore<ApplicationUser>>();
store.Setup(x => x.CreateAsync(user))
.Returns(identityResult);
Assert.IsTrue(identityResult.Result.Succeeded);
}
但是测试仍然失败,预期是真的&#39;错误。
谢谢
答案 0 :(得分:2)
我正在回答我自己的问题,因为某些原因问题没有得到任何意见,我确实设法解决了这个问题。
我不知道这是否是正确的方法,但我修复它的方法是首先将successfulResult
更改为Task<IdentityResult>
并将IdentityResult.Success
分配给它
[Test]
public void Can_Create_User()
{
Task<IdentityResult> successfulResult = Task.FromResult<IdentityResult>(IdentityResult.Success);
var user = new ApplicationUser() { UserName = "Andy", Email = "andy@andy.com" };
var store = new Mock<UserStore<ApplicationUser>>();
store.Setup(x => x.CreateAsync(user)).Returns(successfulResult);
Task<IdentityResult> tt = (Task<IdentityResult>) store.Object.CreateAsync(user);
Assert.IsTrue(tt.Result.Succeeded);
}
答案 1 :(得分:0)
我没有看到您尝试测试的代码,但据我所知,问题是如何模拟返回IdentityResult的方法?
默认情况下,您无法创建IdentityResult的新实例并为Successed属性赋值,因为它不访问SET,它只接受GET。
无论如何, IdentityResult 有受保护的构造函数,它接受bool,表示是成功是真还是假。这意味着您可以创建自己继承IdentityResult 的IdentityResultMock类,而不是控制创建赋值成功。
您可以看到我回答here的示例。
请参阅我的