java - 如何使用 Mockito 编写单元测试

标签 java spring controller mockito

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

最佳答案

你没有说什么null,但我假设你的模拟没有一个是空的,所以你必须在你的测试类上声明以下运行器:

@RunWith(MockitoJUnitRunner.class)

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

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

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

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

关于java - 如何使用 Mockito 编写单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17221342/

相关文章:

java - 使用spring初始化java枚举中的字段

java - Spring 中的超时 session

swift - 在与关闭时相同的 View Controller 中打开(快速)

php - 我可以在 init() 方法中取消 Zend Controller 操作吗?

java - 使用 PowerMock 和 TestNG 模拟单个静态方法

java OutputStreamWriter 和 CP437

java - 为什么对接口(interface)的引用数组可以容纳实现该接口(interface)的类?

spring - 为什么Springboot的JPA实体是抽象的?

Java 类加载 - 哪个类加载器和/或类导致加载?

laravel - 在 Laravel 中查找或创建