0

我有一个简单的控制器,我想为其编写一个 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。我怎样才能为这个控制器编写一个合适的单元测试?

4

2 回答 2

1

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

@RunWith(MockitoJUnitRunner.class)

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

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

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

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

于 2013-06-21T07:30:48.967 回答
0

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

private Model model = new Model(<params>)

private DefaultControllerImpl sut = new DefaultControllerImpl(<params>);
于 2013-06-20T18:44:09.683 回答