2012-12-06 44 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有效嗎? –