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类中,并删除静态类





  • 相关阅读:
    easyui loadFilter 使用
    控件setText与setValue赋值顺序先后区别
    JS选中和取消选中checkbox
    easyui 解决连弹两个dialog时候,第二个dialog居中问题
    bootstrap基础学习【导航条、分页导航】(五)
    bootstrap基础学习【菜单、按钮、导航】(四)
    sublime设置
    《啊哈!算法》笔记
    《编码的奥秘》笔记
    Effective Objective-C 2.0 — 第14条:理解“类对象“的用意
  • 原文地址:https://www.cnblogs.com/jgig11/p/5786327.html
Copyright © 2011-2022 走看看