首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >and模拟和Mockito模拟被忽略。

and模拟和Mockito模拟被忽略。
EN

Stack Overflow用户
提问于 2017-07-05 08:32:05
回答 1查看 2.4K关注 0票数 2

我正试图在我的Main.class中注入一个模拟子程序,但它似乎不起作用。(在与依赖项绑定的junit中使用powermock 1.7.0 )

验证说我的模拟对象没有交互。不知道为什么。

这是我的Main.class:

代码语言:javascript
运行
复制
public class Main {
  private Child child;

  public Main(){    }

  public void setChild(Child child){
    this.child = child;
  }

  public void play(){
    child = new Child();
    child.setNumber(50);
    System.out.println(child.getNumber());
  }
}

这是我的Child.class:

代码语言:javascript
运行
复制
public class Child {

  private int number;

  public void setNumber(int number){
      this.number = number;
  }

  public int getNumber(){
      return number;
  }
}

这是我的Test.class:

代码语言:javascript
运行
复制
import static org.powermock.api.mockito.PowerMockito.mock;
import static org.powermock.api.mockito.PowerMockito.when;

import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mockito;
import org.powermock.core.classloader.annotations.PrepareForTest;
import org.powermock.modules.junit4.PowerMockRunner;

@RunWith(PowerMockRunner.class)
@PrepareForTest({Child.class, Main.class})
public class MainTest {
    private Child child;
    private Main main;

    @Test
    public void testMain(){
        main = new Main();
        main.play();
        Mockito.verify(child).getNumber();
    }

    @Before
    public void setup(){
        child = mock(Child.class);
        when(child.getNumber()).thenReturn(10);
    }
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-07-05 08:34:25

您在测试中创建的模拟从未被实际使用过,因为每次调用play()时,主对象都会创建一个新的Child对象。

您想要的是一种告诉生产代码使用模拟子实例的方法,例如通过setter。

代码语言:javascript
运行
复制
public void play(){
    // child = new Child(); // do not create a new instance each time
    child.setNumber(50);
    System.out.println(child.getNumber());
}

MainTest

代码语言:javascript
运行
复制
@Test
public void testMain(){
    main = new Main();
    main.setChild(child); // tell it to use the mock
    main.play(); 
    Mockito.verify(child).getNumber();
}
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/44920911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档