【问题标题】:Null controller when test with Mockito使用 Mockito 测试时为空控制器
【发布时间】:2021-11-07 17:51:08
【问题描述】:

我正在测试需要自动接线服务的控制器。

我在很多地方阅读(例如Mockito: How to test my Service with mocking?)我需要这样做

@RunWith(JUnitPlatform.class)
public class AdminControllerTest {

  @Mock
  private AdminService service;

  @InjectMocks
  private AdminController adminController;

  @Test
  public void registerUser() {
    Boolean resultReal = adminController.registerUser();
    assertTrue(resultReal);
  }
}

但它失败了,我看到是因为 adminController 为空

相反,如果我这样创建控制器

AdminController adminController = new AdminController();

它可以工作,但我可以注入模拟。

也许我忘记了什么

【问题讨论】:

  • 显示控制器定义并包含注入的依赖项。

标签: testing junit mocking mockito


【解决方案1】:

the documentation for InjectMocks:

必须调用 MockitoAnnotations.openMocks(this) 方法来初始化带注释的对象。在上面的例子中,openMocks() 在测试基类的@Before (JUnit4) 方法中被调用。对于 JUnit3 openMocks() 可以转到基类的 setup() 方法。相反,您也可以将 openMocks() 放入您的 JUnit 运行器 (@RunWith) 或使用内置的 MockitoJUnitRunner。

因此,要么:

  1. 在测试运行前致电openMocks(this)
  2. 在课堂上使用@RunWith(MockitoJUnitRunner.class)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多