在进行Mock时我们发现,IUserRepository 放在方法中,无法在对象以外进行配置,可扩展性不强,于是我们将其提取为字段,并通过构造函数来进行赋值。
1 public class UserService 2 { 3 public IUserRepository userRepository; 4 5 public UserService(IUserRepository userRepository) 6 { 7 this.userRepository = userRepository; 8 } 9 10 public string GetUserNameById(string id) 11 { 12 13 User user = userRepository.GetUser(id); 14 15 return user.Name; 16 } 17 } |
1 public class MockUserRepository : IUserRepository 2 { 3 public User GetUser(string id) 4 { 5 return new User(){Id = "3577", Name = "Lanvige"}; 6 } 7 } |
在测试用例中,我们可以用该Mock的对象作为Service的操作对象。这样,我们总能保证测试的最小性和准确性。
1 [TestClass] 2 public class UserSericeTest 3 { 4 public void Get_UserName_By_Id_Test() 5 { 6 IUserRepository userRepository = new MockUserRepository(); 7 8 UserService userSerivce = new UserService(userRepository); 9 User user = userSerivce.GetUserNameById("3277"); 10 11 Assert("3277", user.Id); 12 Assert("Lanvige", user.Name); 13 } 14 } |