I'd like to unit test my application made in .NET Core with Razor Pages. I need to mock my dbContext and my UserManager - however, I seem to keep getting null back as result.
FakeUserManager
public class FakeUserManager : UserManager<ApplicationUser> { public FakeUserManager() : base(new Mock<IUserStore<ApplicationUser>>().Object, new Mock<IOptions<IdentityOptions>>().Object, new Mock<IPasswordHasher<ApplicationUser>>().Object, new IUserValidator<ApplicationUser>[0], new IPasswordValidator<ApplicationUser>[0], new Mock<ILookupNormalizer>().Object, new Mock<IdentityErrorDescriber>().Object, new Mock<IServiceProvider>().Object, new Mock<ILogger<UserManager<ApplicationUser>>>().Object) { } } My TestClass
[TestFixture] public class UserTest { private ApplicationDbContext _dbContext { get; set; } public void TestSetUp() { DbContextOptionsBuilder<ApplicationDbContext> optionsbuilder = new DbContextOptionsBuilder<ApplicationDbContext>(); optionsbuilder.UseInMemoryDatabase(databaseName: "TestDB"); _dbContext = new ApplicationDbContext(optionsbuilder.Options); _dbContext.Users.Add(new ApplicationUser { Id = "1", FirstName = "Test", LastName = "Alpha", CreatedAt = DateTime.Now, UpdatedAt = DateTime.Now, }); _dbContext.SaveChanges(); } [Test] public void MyTest() { Mock<FakeUserManager> fakeUserManager = new Mock<FakeUserManager>(); var result = fakeUserManager.Object.FindByIdAsync("1"); // I know this Assert always returns success, but I'd like var result to return my ApplicationUser found by the FakeUserManager Assert.AreEqual("test", "test"); } } Before marking this question as duplicate, yes - I'd look at other posts but they did not satisfy my answer.
When I run this test, var result returns null and I do not understand why.
edit ###
[Test] public async void MyTest() { var mockStore = Mock.Of<IUserStore<ApplicationUser>>(); var mockUserManager = new Mock<UserManager<ApplicationUser>>(mockStore, null, null, null, null, null, null, null, null); var user = new ApplicationUser { Id = "1", FirstName = "Test", LastName = "Test" }; mockUserManager .Setup(x => x.CreateAsync(It.IsAny<ApplicationUser>(), It.IsAny<string>())) .ReturnsAsync(IdentityResult.Success); await mockUserManager.Object.CreateAsync(user); var result = mockUserManager.Object.FindByIdAsync("UserA"); Assert.AreEqual("test", "test"); }
null