代码之家  ›  专栏  ›  技术社区  ›  QuestToLearn

如何模拟对从受保护资源继承的接口的调用

  •  1
  • QuestToLearn  · 技术社区  · 7 年前

    我有以下代码结构

    pkg a
    public class TypeA {
    
    @Resource
    protected Resource resource
    
    //other members and methods
    
    
    }
    
    pkg a
    public class TypeB extends TypeA {
    
    public void doSomething() {
      resource.methodCall();
     }
    
    }
    

    2 回复  |  直到 7 年前
        1
  •  1
  •   GhostCat    6 年前

    这里有三个选项:

    • 自然你会想办法
    • 您可以研究Mockito spy概念,它允许部分模拟
    • 您重新设计了设计,以使其更易于测试(例如,为了合理的理由,您可以将继承与所喜欢的组合进行交换)
        2
  •  1
  •   Dmytro Maslenko    7 年前

    如果你有不同的包裹,我建议你 getResource() 将在测试中重写的方法:

    pkg a
    public class TypeA {
        @Resource
        protected Resource resource
    
        // for unit tests only
        public Resource getResource() {
            return resource;
        }
    }
    
    pkg a
    public class TypeB extends TypeA {
        public void doSomething() {
          getResource().methodCall();
        }
    }
    

    在您的测试中,您覆盖了 方法返回模拟实例:

    @Test
    public void testDoSomething() {
        Resource mockedResource = Mockito.mock(Resource.class);
    
        TypeB typeB = new TypeB() {
            @Override
            Resource getResource() {
                return mockedResource;
            }
        }
    
        typeB.doSomething();
    
        // verify what you need
    }