zoukankan      html  css  js  c++  java
  • 重构12-Break Dependencies(打破依赖)

    有些单元测试需要恰当的测试“缝隙”(test seam)来模拟/隔离一些不想被测试的部分。如果你正想在代码中引入这种单元测试,那么今天介绍的重构就十分有用。在这个例子中,我们的客户端代码使用一个静态类来实现功能。但当需要单元测试时,问题就来了。我们无法在单元测试中模拟静态类。解决的方法是使用一个接口将静态类包装起来,形成一个缝隙来切断与静态类之间的依赖。 
     
     
    public class AnimalFeedingService {
    private Boolean FoodBowlEmpty;
    public void Feed() {
    if (FoodBowlEmpty)
    Feeder.ReplenishFood();
    // more code to feed the animal
    }
    }
    public static class Feeder {
    public static void ReplenishFood() {
    // fill up bowl
    }
    }
    重构时我们所要做的就是引入一个接口和简单调用上面那个静态类的类。因此行为还是一样的,只是调用的方式产生了变化。这是一个不错的重构起始点,也是向代码添加单元测试的简单方式。 
      
    public class AnimalFeedingService{
    public IFeederService FeederService;
    public AnimalFeedingService(IFeederService feederService){
    FeederService = feederService;
    }
    private Boolean FoodBowlEmpty;
    public void Feed(){
    if (FoodBowlEmpty)
    FeederService.ReplenishFood();
    // more code to feed the animal
    }
    }
    public interface IFeederService{
    void ReplenishFood();
    }
    public class FeederService extends IFeederService{
    public void ReplenishFood(){
    Feeder.ReplenishFood();
    }
    }
    public static class Feeder{
    public static void ReplenishFood(){
    // fill up bowl
    }
    }
    现在,我们可以在单元测试中将模拟的IFeederService传入AnimalFeedingService构造函数。测试成功后,我们可以将静态方法中的代码移植到FeederService类中,并删除静态类





  • 相关阅读:
    memcached启动参数
    Shell 获取当前执行脚本的路径
    linux 下 openssl 编译和交叉编译
    网站更换域名
    linux访问windows共享文件夹
    linux下安装NPM管理工具
    快速构建C++项目工具Scons,结合Editplus搭建开发环境
    C++ Config 配置文件类
    iOS代码Button Demo
    (转)iOS面试题目
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786327.html
Copyright © 2011-2022 走看看