使用Mockito

时间:2015-12-24 00:24:04

标签: java junit mockito

我有以下课程

package pckt.theclass;

public class TheClass {

    public String name = "testing";

    public void setTheName(){
        this.name = getNamesFromDB();
    }

    public String getNamesFromDB(){
        return "pablo";
    }

}

这是它的测试类

package pckt.theclass;

import org.junit.*;
import org.mockito.Mockito;


public class TheClassTest {

    @Test
    public void testSetTheName() {

        //TheClass tc = Mockito.mock(TheClass.class);
        //Mockito.when(tc.getNamesFromDB()).thenReturn("dbName");
        TheClass tc = new TheClass();
        tc.setTheName();
        System.out.println("Name: "+tc.name);
        Assert.assertEquals("pablo", tc.name);
    }
}

如果我按原样运行测试类,它就会通过。但是,如果我取消注释Mockito行并修改assertEquals以期望" dbName"测试失败,错误

expectend "dbName" but was <null>

问题是因为实例变量&#34; name&#34;由于某种原因没有填充,即使它已经在其声明中具有值。我是Mockito的新手,所以我不确定我是否需要为此工作做点什么。

思想?

1 个答案:

答案 0 :(得分:1)

这是因为如果您将TheClass tc实例声明为模拟,setTheName的主体不再是您在TheClass中定义的实体,而是一个存根方法返回null。这是因为你没有训练&#34; setTheName有任何行为。

有效地,模拟的实例看起来好像是这样声明的:

public class TheClass {
    public String name = null;

    public void setTheName(){
        // do nothing
    }

    public String getNamesFromDB(){
        return "dbName";
    }
}

你犯了一个基本的Mockito错误:你正在嘲笑被测系统。