2012-12-06 57 views
3

我有一个Apicontroller它依赖于工作单元对象。如何编写测试用例嘲讽ApiController哪些依赖于在ApiController构造函数中实现的工作单元。具有工作单元的嘲弄ApiController依赖关系

下面是代码:

ApiController:

public class UserController : ApiController 
{ 
    public IUoW UoW { get; set; } 
    // GET api/user 
    public UserController(IUoW uow) 
    { 
     UoW = uow; 
    } 

    public IEnumerable<Users> Get() 
    { 
     return UoW.Users.Getall(); 
    }  
} 

测试用例:

[TestMethod] 
public void TestApiController() 
{ 
    var userManager = new Mock<IUoW>(); 
    userManager.Setup(s => s.Users); 

    var controller = new UserController(userManager.Object); 
    var values = controller.Get(); 
    Assert.IsNotNull(values); 
} 

的用户类已在UoW.Users这里提到是

public class UoW:IUoW,IDisposable 
{ 
    private MvcWebApiContext DbContext { get; set; } 
    protected IRepositoryProvider RepositoryProvider { get; set; } 

    private IRepository<T> GetStandardRepo<T>() where T : class 
    { 
     return RepositoryProvider.GetRepositoryForEntityType<T>(); 
    } 

    public IRepository<Users> Users 
    { 
     get { return GetStandardRepo<Users>(); } 
    } 
} 

Users类本身就是

[Table("UserProfile")] 
public class Users 
{ 
    [Key] 
    [DatabaseGenerated(DatabaseGeneratedOption.Identity)] 
    public int UserId { get; set; } 


    public string FirstName { get; set; } 
    public string LastName { get; set; } 
    public string UserName { get; set; } 
    public string Password { get; set; } 

    [DataType(DataType.PhoneNumber)] 
    public long Mobile { get; set; } 
} 

当我尝试调试测试用例,测试情况显示对象UoW.UsersUserController空。它显然没有通过WebActivator进行初始化,因为global.asax没有通过模拟调用。现在,在这种情况下如何编写一个成功的测试场景,以便WebApicontroller将带有数据的用户对象返回给我?

回答

3

你在使用Moq吗?

正如我不能看到UoW.Users属性是什么类型的,我不能演示如何正确地嘲笑它(更新 IRepository),但应该被嘲笑和GETALL方法存根返回用户的样本名单。

更新

 var userManager = new Mock<IUoW>(); 

     userManager.Setup(s => s.Users).Returns(()=> 
     { 
      var userReposisitory = new Mock<IRepository<Users>>(); 

      userReposisitory.Setup(ur => ur.GetAll()).Returns(()=> { 
       var listOfUsers = new List<Users>(); 
       listOfUsers.Add(new Users { FirstName = "Example" }); 
       return listOfUsers.AsQueryable(); 
      }); 

      return userReposisitory.Object; 
     }); 

     var controller = new UserController(userManager.Object); 
     var result = controller.Get(); 
     Assert.IsNotNull(result); 
     Assert.IsTrue(result.Count() > 0); 
+0

哦,好吧!是我不好我会在这里包括用户类。请稍等:) – Joy

+0

@Joy - 不用担心。答案已更新。附:类名“用户”是一个有点混乱,建议你让它单数“用户”。 –

+0

@Joy有效吗? –