如何用Mockito编写单元测试

时间:2013-06-20 18:41:13

标签: java spring controller mockito

我有一个简单的控制器,我想写一个Mockito单元测试。这是代码:

private final UserController userCtl;

public String get(final Model model) {
    return this.userCtl.getLoginForm(model);
}

这是我的测试:

@Mock
private Model model;

private DefaultControllerImpl sut;

@Before 
public void setup() { 
    this.ctl = new DefaultControllerImpl(this.userCtl, this.authService, this.orgService, this.riskSpaceService); 
    this.ctl.setMessageSource(this.messageSource); 
}

@Test
public void testGet() {        
    final String view = this.sut.get(this.model);
    assertThat(view).isEqualTo(UserController.LOGIN_PATH);
}

但是,此测试始终返回null。如何为该控制器编写适当的单元测试?

2 个答案:

答案 0 :(得分:1)

你没有说是什么null但是我假设你的嘲笑都不是,所以你必须在你的测试类上声明以下跑步者:

@RunWith(MockitoJUnitRunner.class)

然而,我在测试中看不到的是添加到模拟中的任何行为。例如,您没有告诉usrCtlgetLoginForm(...)来电时返回任何内容,因此默认情况下它会返回null - 也许这就是您看到null的原因。

要指示usrCtl模拟返回您想要的值,您可以执行以下操作:

given(userCtl.getLoginForm(model)).willReturn(UserController.LOGIN_PATH);

如果您还没有这样做,请查看Mockito documentation,以获取更多信息和示例。

答案 1 :(得分:0)

您从未实例化过测试类的属性。

private Model model = new Model(<params>)

private DefaultControllerImpl sut = new DefaultControllerImpl(<params>);