我正在尝试为我的帐户控制器web apis编写一些单元测试,这些测试使用了UserManager,但我在以下部分的标题中继续接收null:
public ApplicationUserManager UserManager
{
get
{
return _userManager ?? Request.GetOwinContext().GetUserManager<ApplicationUserManager>();
}
private set
{
_userManager = value;
}
}
我已经尝试了很多不同的方法来解决这个问题,因为我已经读过我需要模拟ApplicationUser的一些部分但是没有设法让任何一个部分来解决我的问题。下面是我在单元测试教程后实现的一些代码:
public interface IStoreAppContext : IDisposable
{
//IDbSet<User> Users { get; }
DbSet<User> u { get; }
DbSet<SportProgram> SportContext { get; set; }
int SaveChanges();
void MarkAsModified(User item);
}
}
我想在我的帐户控制器中进行单元测试的api是: (下面的这一行&#34; var user ...&#34;是问题开始的地方。它调用此问题标题中的行)
[Route("userProfile/{username}")]
public IHttpActionResult getUserProfile(String username)
{
var user = UserManager.FindByName(username);
if (user != null)
{
db2.MarkAsModified(user);
return Ok(user);
}
else
{
return NotFound();
}
}
然后在我的TestProject中,我有以下上下文类:
class TestStoreAppContext : IStoreAppContext
{
public TestStoreAppContext()
{
this.u = new TestProductDbSet();
}
public DbSet<User> u { get; set; }
public DbSet<SportProgram> SportContext { get; set; }
public int SaveChanges()
{
return 0;
}
public void MarkAsModified(User item) { }
public void Dispose() { }
}
}
最后在我的测试控制器中,我测试了api:
[TestMethod()]
public void getUserProfileTest()
{
var context = new TestStoreAppContext();
context.u.Add(GetDemoProduct());
var controller = new AccountController(context);
var result = controller.getUserProfile("john") as OkNegotiatedContentResult<User>;
Assert.AreEqual("john", result.Content.UserName);
}
上面调用的GetDemoProduct:
User GetDemoProduct()
{
return new User()
{
Id = "3",
UserName = "john",
Password = "Password-1",
};
}
有人能指出我正确的方向吗?