不返回模拟值

时间:2017-02-21 13:24:35

标签: java mocking mockito

我有两个班级:

public class Foo {
    public int getInt(){
       return 10;
    } 
}

public class Bar {
    Foo testClass = new Foo();

    public Foo getTestClass() {
        return testClass;
    }

    public void setTestClass(Foo testClass) {
       this.testClass = testClass;
    }

    public int get(){
        return testClass.getInt();
    }
}

最后我有一个模拟Foo的测试类:

public class TestClass {

    Foo test;

    @Before
    public void init(){
        test = Mockito.mock(Foo.class);
        Mockito.when(test.getInt()).thenReturn(5);
    }

    @Test
    public void tst(){
        Bar t = new Bar();
        Assert.assertEquals(t.get(), 5);

    }
}

你能告诉我,为什么我从t.get()获得10分,尽管在模拟"我说"我想要5个?

我如何写Mock来获得嘲弄的价值?

提前致谢。

2 个答案:

答案 0 :(得分:1)

您忘记通过调用t.setTestClass(test); 设置您的模拟。

答案 1 :(得分:0)

当你写作时:

public class TestClass {

    Foo test;

    @Before
    public void init(){
        test = Mockito.mock(Foo.class);
        Mockito.when(test.getInt()).thenReturn(5);
    }

    @Test
    public void tst(){
        Bar t = new Bar();
        Assert.assertEquals(t.get(), 5);
    }
}  

您正在嘲笑您的Foo课程,但未在Bar课程中使用它。因此,如果您调用return方法,它将不会发送您尝试模拟的结果