当前位置: 首页 > 知识库问答 >
问题:

使用Spring Boot和JUnit从Controller类生成模拟存储库

谭炎彬
2023-03-14
MyController {

    @Autowired
    MyService service;

    //Api call for getDetails
    service.getDetails();
}


MyService {

   @Autowired
   MyRepository repo;

}

MyControllertest {
    @Autowired
    MyController controller;

    @Mock
    MyRepository repoMock;

    @Before
    public void setup(){
        // intit mocks
    }

    @Test
    public void myTest(){
        when(repoMock.getDetails()).thenReturn(null);
        controller.getdetails();
    }
}

谁能请解释我如何从控制器类模拟存储库。

在这个博客上发了这么多问题,但我没有得到任何回应。

共有1个答案

谭向晨
2023-03-14

它没有使用您的模拟,因为您没有将这些模拟注入到您的控制器/服务类中。取而代之的是,您正在自动操作它。
正确的操作方法是

@RunWith(MockitoJUnitRunner.class)
public class MyControllerTest {

    @InjectMocks
    MyController controller;
    .....

}

更好的解决方案是摆脱字段注入,使用构造函数注入

例如,在控制器和服务类中。您可以在contructor上使用@autowired而不是在Fields上使用。例如

class MyService {

   private final MyRepository repo;

   @Autowired
   public MyService(final MyRepository repo) {
      this.repo = repo;
   }
}
class MyController {

    @Autowired
    private final MyService service;

    public MyController(final MyService service) {
         this.service = service
    }
}
@RunWith(MockitoJUnitRunner.class)
public class MyControllertest {

    MyController controller;
    MyService service;

    @Mock
    MyRepository repoMock;


    @Before
    public void setup(){
        // init mocks
      service = new MyService(repoMock);
      controller = new MyController(service);
    }
  ..............
}
 类似资料:
  • 我已经创建了一个包含控制器、服务和存储库层的基本Rest API。我现在正在尝试为通过产品ID查找产品的服务层方法编写一个单元测试。但是,当我运行测试时,它会在我试图模拟存储库findById()方法的行中抛出一个NullPointerException。 服务层中的getProductById()方法如下所示: 我的服务层测试类:

  • 我有控制器方法,为此我正在创建Junit,但在调用服务方法时出现Null指针错误。我使用了电源模拟,但仍然得到Null指针。 方法: 测试方法: @InjectMocks私有DataSourceReportController dataSourceReportController; 在“dataSourceReportService.listDataSourceReportByCurrentRun

  • 当我尝试用PowerMock和Mockito测试一个方法并模拟它的依赖关系时遇到了问题。我尝试将依赖关系方法转换为非静态方法,并使用@mock注释和@injectmocks,但没有任何结果。 下面是正在测试的类和方法: 这里有一个我想要嘲弄的依赖关系,我很难嘲弄它: 最后,但不是最不重要的是,使用失败的测试方法的测试类。我不得不说,它甚至没有到达assert方法调用,而是在when().ThenR

  • 我使用Spring Initializr生成了一个Spring Bootweb应用程序,使用嵌入式Tomcat+Thymeleaf模板引擎,并将其打包为一个可执行的JAR文件。 类NexTelsMSSender: . 但这似乎并不是在嘲弄对象属性,因为当我打包应用程序时。我有一个错误:

  • 我试图编写一些基本的backingBean测试,但我一直在模仿UserContext和facesContext。 此代码在我尝试测试的代码中: 在另一段代码中,我得到了以下内容: 如何在标准jUnit测试中仅使用mockito来模拟这些?还是必须使用PowerMock之类的工具?

  • 我试图从ISO20022存储库中生成最新的一组XSD,它是以EMF格式提供的。