• 31天重构指南之十二:分解依赖


    如果你要在你的代码中加入单元测试但有一部分代码是你不想测试的,那么你应用使用今天的重构。在下面的例子中我们应用静态类来完成某些工作,但问题是在单元测试时我们无法mock静态类,所以我们只能引入静态类的装饰接口(wrapper interface)来分解对静态类的依赖。

       1: public class AnimalFeedingService
       2: {
       3:     private bool FoodBowlEmpty { get; set; }
       4:  
       5:     public void Feed()
       6:     {
       7:         if (FoodBowlEmpty)
       8:             Feeder.ReplenishFood();
       9:  
      10:         // more code to feed the animal
      11:     }
      12: }
      13:  
      14: public static class Feeder
      15: {
      16:     public static void ReplenishFood()
      17:     {
      18:         // fill up bowl
      19:     }
      20: }
    要对上述代码应用分解依赖重构,我们要做的是添加一个接口和一个实现类,在实现类中调用静态类的方法,所以说具体做什么事情没有改变,改变的只是形式,但这样做的一个好处是增加了
    了代码的可测试性。
       1: public class AnimalFeedingService
       2: {
       3:     public IFeederService FeederService { get; set; }
       4:  
       5:     public AnimalFeedingService(IFeederService feederService)
       6:     {
       7:         FeederService = feederService;
       8:     }
       9:  
      10:     private bool FoodBowlEmpty { get; set; }
      11:  
      12:     public void Feed()
      13:     {
      14:         if (FoodBowlEmpty)
      15:             FeederService.ReplenishFood();
      16:  
      17:         // more code to feed the animal
      18:     }
      19: }
      20:  
      21: public interface IFeederService
      22: {
      23:     void ReplenishFood();
      24: }
      25:  
      26: public class FeederService : IFeederService
      27: {
      28:     public void ReplenishFood()
      29:     {
      30:         Feeder.ReplenishFood();
      31:     }
      32: }
      33:  
      34: public static class Feeder
      35: {
      36:     public static void ReplenishFood()
      37:     {
      38:         // fill up bowl
      39:     }
      40: }
     在应用了分解依赖模式后,我们就可以在单元测试的时候mock一个IFeederService对象并通过AnimalFeedingService的构造函数传递给它。
    原文链接:http://www.lostechies.com/blogs/sean_chambers/archive/2009/08/12/refactoring-day-12-break-dependencies.aspx
  • 相关阅读:
    Virtual Studio 2010在Release模式下进行调试的设置方法
    OpenGL Shader
    OGRE的安装编译
    开源GIS平台空间数据管理与发布技术研究
    风靡世界的小游戏2048源代码
    成为优秀程序员的几个阶段
    颜色空间模型(HSVLABRGBCMYK)
    希望自己的博客被知名搜索引擎收录的网址
    我的第一篇博客
    当你的善良受到委屈时
  • 原文地址:https://www.cnblogs.com/zhangronghua/p/1576411.html
Copyright © 2020-2023  润新知