我有一个简单的控制器,我想写一个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。如何为该控制器编写适当的单元测试?
答案 0 :(得分:1)
你没有说是什么是null
但是我假设你的嘲笑都不是,所以你必须在你的测试类上声明以下跑步者:
@RunWith(MockitoJUnitRunner.class)
然而,我在测试中看不到的是添加到模拟中的任何行为。例如,您没有告诉usrCtl
在getLoginForm(...)
来电时返回任何内容,因此默认情况下它会返回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>);