我正在开发一个ASP.NET MVC 5项目,我一直在使用Ninject 3.2和Moq测试普通控制器。使用最新版本非常简单,这是我的代码:
namespace CianaConsultancy.POC.Abstract
{
public interface IAuditRepository
{
IEnumerable<User> Users { get; }
}
}
namespace CianaConsultancy.POC.Entities
{
public class User
{
public string UserId { get; set; }
}
}
namespace CianaConsultancy.Controllers
{
public class POCController : Controller
{
private readonly IAuditRepository repository;
public POCController(IAuditRepository auditRepo)
{
this.repository = auditRepo;
}
public string Index()
{
var user = (from u in repository.Users
select u).FirstOrDefault();
return user.UserId;
}
}
}
在NinjectWebCommon.cs中:
private static void RegisterServices(IKernel kernel)
{
Mock<IAuditRepository> mock = new Mock<IAuditRepository>();
mock.Setup(m => m.Users).Returns(
new List<User>
{
new User {
UserId = "185b36c3"
}
}
);
kernel.Bind<IAuditRepository>().ToConstant(mock.Object);
}
工作正常。
现在我正在转向Web API控制器,因为我没有找到关于这个主题的任何有用的博客,我只是采用与普通控制器相同的方式:
namespace CianaConsultancy.Controllers
{
public class DynmQuestionGroupController : ApiController
{
private readonly IAuditRepository repository;
public DynmQuestionGroupController()
{
}
public DynmQuestionGroupController(IAuditRepository auditRepo)
{
this.repository = auditRepo;
}
public IEnumerable<User> Get()
{
return repository.Users;
}
}
}
它不起作用,在Get()方法中,repository属性为null。
我想念什么?感谢。