当呼叫吸气器时,Mockito设置场

时间:2013-11-13 10:56:26

标签: java junit mocking mockito

我正在测试方法并且遇到一个问题,即我的实体有一个null的字段,但我需要它不是空的。我有这个:

class MyClass {

    void myMethod() {
        Entity entity = new Entity();
        String str = entity.getField(); // It's null now
        if (str == null) { //always true
            //do something
        }
    }
}

现在在测试中我需要我的字段不为空。
我试着在测试中做以下事情:

Entity entity = mock(Entity.class);
when(entity.getField()).thenReturn("text");

但似乎它不起作用。问题是我无法使用PowerMock或重构原始类 有没有办法可以在if语句之前返回文本或设置字段?

3 个答案:

答案 0 :(得分:3)

查看代码,您无法将模拟的Entity实例注入到您的方法中。

您必须调整MyClass以使其接受Entity对象,从而允许您传递模拟对象以进行测试。如果没有这个,你就不能期望能够模拟对象。

class MyClass {

    private Entity entity;

    public MyClass(Entity entity) {
      this.entity = entity;
    }

    void myMethod() {
        String str = entity.getField(); // It's null now
        if (str == null) { //always true
            //do something
        }
    }
}

如果您不想更改面向公众的构造函数,请考虑添加一个package-private setter方法,以便您调整Entity实例。但是您必须将实例存储为一个字段,以允许您从测试代码中更改它。

答案 1 :(得分:0)

可能,“spy()”可以用来代替“when()”:http://docs.mockito.googlecode.com/hg/org/mockito/Mockito.html#13

答案 2 :(得分:0)

之前我遇到过类似的问题,我所做的就是创建一个单独的包装器方法来为单元测试注入依赖项。

例如,在这里,您可以创建wrapperMyMethod()来解决问题,代码将是:

void wrapperMyMethod(){
    Entity entity = new Entity();
    void myMethod(entity);
}
void myMethod(Entity entity) {
    String str = entity.getField(); 
}

希望这能解决您的问题。

相关问题