我有一些問題,我的測試應用ASP.NET MVC 5這樣起訂量表示構造參數不能過去了接口嘲笑
Castle.Proxies.IdentityUserLogin:的EntityType「IdentityUserLogin」沒有定義的關鍵。定義此EntityType的關鍵字。 Castle.Proxies.IdentityUserRole :: EntityType'IdentityUserRole'沒有定義鍵。定義此EntityType的關鍵字。 IdentityUserLogins:EntityType:EntitySet'IdentityUserLogins'基於沒有定義鍵的類型'IdentityUserLogin'。 IdentityUserRoles:EntityType:EntitySet'IdentityUserRoles'基於沒有定義鍵的類型'IdentityUserRole'。
我測試了UserService,我使用的是Moq和NUnit框架。我sovled所有問題,當我加入這個:
var mockContext = new Mock<SomeContext>() { CallBase = true };
但現在我有這樣的問題:
留言信息:System.ArgumentException:構造函數參數不能過去了接口嘲笑。
如果你願意,你可以檢查我下面的代碼,但我認爲,問題只在「mockContext」
[Test, TestCaseSource(typeof(UserServiceTestData), nameof(UserServiceTestData.WrongCreateUserTestCases))]
public void ShouldWrongUserCreationTest(UserDTO userDto)
{
//Arrange
var user = new ApplicationUser
{
Email = "test",
Roles = { new IdentityUserRole { UserId = "test", RoleId = "test" } },
ClientProfile = new ClientProfile { Name = "test" }
};
var mockStore = new Mock<IUserStore<ApplicationUser>>();
mockStore.Setup(x => x.FindByIdAsync(It.IsAny<string>())).Returns(Task.FromResult(user));
mockStore.As<IUserEmailStore<ApplicationUser>>().Setup(x => x.FindByEmailAsync("existed")).Returns(Task.FromResult((ApplicationUser)null));
mockStore.As<IUserPasswordStore<ApplicationUser>>();
mockStore.As<IUserRoleStore<ApplicationUser>>().Setup(x => x.AddToRoleAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>()))
.Returns(Task.FromResult(IdentityResult.Success));
mockStore.As<IUserRoleStore<ApplicationUser>>().Setup(x => x.GetRolesAsync(It.IsAny<ApplicationUser>()))
.Returns(Task.FromResult((IList<string>)new List<string>()));
mockStore.Setup(x => x.CreateAsync(It.IsAny<ApplicationUser>()))
.Returns(Task.FromResult(IdentityResult.Success));
var mockDbSet = new Mock<DbSet<ClientProfile>>(MockBehavior.Strict);
mockDbSet.Setup(x => x.Add(It.IsAny<ClientProfile>())).Returns(new ClientProfile());
var userManager = new ApplicationUserManager(mockStore.Object);
var mockContext = new Mock<AuthenticationContext>() { CallBase = true };
var mock = new Mock<IIdentityUnitOfWork>(mockContext.Object);
mock.Setup(a => a.UserManager).Returns(userManager);
//Act
var userService = new UserService(mock.Object);
OperationDetails result = userService.Create(userDto);
//Assert
Assert.That(result.Succedeed, Is.False);
}
是的!我決定了這個問題!你也是對的,但這是不正確的測試數據,我已經明白它是如何工作的。謝謝你的幫助 –