Mock Framework 实战

发表于:2010-7-09 11:28

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:Zhiming Jiang    来源:51Testing软件测试网采编

分享:

  紧接着的是我们对IUserRepository接口所创建的Mock类,可以看一下我们很简单的处理了下GetUser方法,让TA返回一个指定值User对象。

 1 public class MockUserRepository : IUserRepository
 2 {
 3     public List<Core.Models.User> GetUsers()
 4     {
 5         throw new NotImplementedException();
 6     }
 7 
 8     public Core.Models.User GetUser(string Id)
 9     {
10         return new User() { Id = "3277", Name = "Lanvige" };
11     }
12 
13     public void Save(Core.Models.User user)
14     {
15         throw new NotImplementedException();
16     }
17 }

  下面的代码是真正的测试用例代码:

 1 [TestClass]
 2 public class UserServiceTest
 3 {
 4     private IUserRepository userRepository;
 5     private UserService userService;
 6 
 7     public UserServiceTest()
 8     {
 9         userRepository = new MockUserRepository();
10         userService = new UserService(userRepository);
11     }
12 
13     [TestMethod]
14     public void Get_User_By_Id_Test()
15     {
16         User user = this.userService.GetUser("3277");
17 
18         Assert.AreEqual("3277", user.Id);
19         Assert.AreEqual("Lanvige", user.Name);
20     }
21 }

  这样,我们就解决了在单元测试中的一些难题,而Mock的理念也得到充分展示,模拟真实对象的方法,返回所需的值,让测试变得更简单。

  但上面的解决方案的实现还是很复杂的,接口我们需要自已动手写另一个实现类,实现接口中所有的方法,虽然有些我们并不需要。如果我们需要更多的验证时,就要去写更多的代码来实现,如判断代码是否被调用和调用次数,传入参数的正确性和忽略实参……

42/4<1234>
重磅发布,2022软件测试行业现状调查报告~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计

法律顾问:上海漕溪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2023
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号