使用Mockito时,实例变量保持为null



我有以下类

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>

这个问题是因为实例变量"name"由于某种原因没有被填充,即使它的声明中已经有一个值。我是Mockito的新手,所以我不确定是否需要为此做点什么。

想法?

这是因为如果您将TheClass tc实例声明为mock,则setTheName的主体将不再是您在TheClass中定义的主体,而是返回null的存根方法。这是因为你没有"训练"setTheName有任何行为。

实际上,被嘲笑的实例看起来就像是这样声明的:

public class TheClass {
    public String name = null;
    public void setTheName(){
        // do nothing
    }
    public String getNamesFromDB(){
        return "dbName";
    }
}

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

相关内容

  • 没有找到相关文章

最新更新