实体框架的单元测试问题(可空值)

时间:2016-01-14 19:31:00

标签: asp.net entity-framework unit-testing

我试图为我的应用程序实现uniTest所以当我试图在我的应用程序中获取User by ID值时,它工作正常,但是当我尝试从我的单元测试类中执行相同的场景时,我总是得到即使ID值正确,也可以为空:

Class AccountController : ApiController
{ 
    private UserService _UserService = null;

    public AccountController()
    {
        _UserService = new UserService();
    }

   [AllowAnonymous]
   [Route("test")]
   public IHttpActionResult test()
    {
       var user = _UserService.getUserById(1); //user --> not null;
    }
}

但是当我尝试使用UnitTest脚本时

     [TestClass]
        public class userServiceTest
        {
            private UserService _UserService = null;

            public userServiceTest()
            {
                _UserService = new UserService();
            }
     [TestMethod]
        public void checkUserCase1()
            {
             var user = _UserService.getUserById(1); //user is null value !!!;
            }
}

用户服务:

    public class UserService 
    {

        private GenericRepository<User> _UserRepository = null;

        public UserService()
        {
            _UserRepository = new GenericRepository<User>();
        }

        public User getUserById(int id)
        {
            return _UserRepository.Find(x => x.Id == id).FirstOrDefault();
        }

   }

通用存储库

 public class GenericRepository<T> : IGenericRepository<T> where T : class
    {
        private MyDbContext db = null;
        private DbSet<T> table = null;

        public IEnumerable<T> Find(Expression<Func<T, bool>> predicate)
        {
            return table.Where(predicate);
        }

    }

IGeneric:

public interface IGenericRepository<T> where T : class
    {
        IEnumerable<T> SelectAll();
        T SelectByID(object id);
        void Insert(T obj);
        void Update(T obj);
        void Delete(object id);
        void Save();
        IEnumerable<T> Find(Expression<Func<T, bool>> predicate);
    }

我的数据库背景:

 public class MyDbContext : DbContext
    {

        public MyDbContext()
            : base("AuthWebApiDb")
        {
            Database.SetInitializer<MyDbContext>(new MyDbInitializer());
        }

        public DbSet<User> Users { get; set; }

    }

我有两个项目:一个是简单项目,第二个是单元测试

1 个答案:

答案 0 :(得分:0)

  • 检查您的UnitTest项目中是否安装了EF。
  • 将连接字符串放在unitest项目的app.config文件中。 感谢@Stewart_T