你如何使这个模拟工作



目标是模拟方法readInputReader类的输入,以便在运行单元测试时返回特定值。如果我运行下面的代码,那么我会得到:

java.lang.AssertionError: 
Expected :1
Actual   :0

这意味着模拟不起作用。如何让它在 Java 中工作?

package foo;
import org.junit.Test;
import static org.junit.Assert.assertEquals;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.when;

public class InputTest {
    private int getInput() {
        return new InputReader().readInput();
    }
    @Test
    public void getInputTest() throws Exception {
        InputReader sc = mock(InputReader.class);
        when(sc.readInput()).thenReturn(1);
        assertEquals(1, getInput());
    }
}
class InputReader {
    int readInput() {
        return 0;
    }
}

在 getInput 方法中显式创建一个 InputReader。因此,您创建的模拟将不会在任何地方使用。要使用它,您必须致电

@Test
public void getInputTest() throws Exception {
    InputReader sc = mock(InputReader.class);
    when(sc.readInput()).thenReturn(1);
    assertEquals(1, sc.readInput());
}

要以其他方式使用模拟,您可以创建一个成员变量以在getInput中使用。或者使用像 Spring 这样的依赖注入框架。

你实际上是在嘲笑类InputReader而不是方法InputTest#getInput。您可以看到差异:

@Test
public void getInputTest() throws Exception {
  InputReader sc = mock(InputReader.class);
  when(sc.readInput()).thenReturn(1);
  assertEquals(0, getInput());     // no mock
  assertEquals(1, sc.readInput()); // mock
}

相关内容

  • 没有找到相关文章

最新更新