2011-07-25 43 views
1

我:注射NUnit測試

using Ninject; 
public class ServiceManager : IServiceHelper 
{ 

    [Inject] 
    public IEntityRepository<User, UserCriteria> UserRepository 
    { 
     get; 
     set; 
    } 

    public User GetUserById(object id) 
    { 
     User user = UserRepository.GetById(id); 

     if (user != null && user.IsHolding.HasValue && user.IsHolding.Value) 
      user.Companies = GetAllCompanies().ToList(); 
     return user; 
    } 
} 

我不會寫測試上GetUserById()。我必須現在做什麼,結果是它的方法給了我。 請注意,UserCriteria不在我的名稱空間(我無法從我的測試中看到它)UserRepository.GetById(id) - 向數據庫發出請求。

回答

0

看起來你需要做的就是爲你的UserRepository屬性提供一個模擬對象,這樣你就不會碰到數據庫,並且可以提供你喜歡的任何結果來驗證你的GetUserById方法是否正常工作。

例如,使用NSubstitute你可以做這樣的事情:

[TestMethod] 
public void GetUserByIdDoesSomething() 
{ 
    var userRepository = Substitute.For<IEntityRepository<User, UserCriteria>>(); 
    //Do something to ensure GetAllCompanies will return a value 
    var user = new User(); 
    userRepository.GetById(Arg.Any<object>()).Returns(user); 

    var serviceManager = new ServiceManager(); 
    serviceManager.UserRepository = userRepository; 
    var result = serviceManager.GetUserById(1); 
    Assert.AreEqual(user, result); 
    Assert.IsTrue(result.Companies.Count() > 0); 
}