代码之家  ›  专栏  ›  技术社区  ›  Syed

使用Spring clound contract编写云契约端点的生产者测试

  •  0
  • Syed  · 技术社区  · 4 年前

    在我的控制器中,我有以下代码

     {
    
        
        
        StudentInfo studentInfo = new StudentInfo();
        studentInfo.setProfileId(studId);
        studentInfo.setClassDetails(studentService.getClassDetailsInfo(studId));
        
             
        studentInfo.setMarksInfo(studentService.getMarksInfo(studId)); 
        
        return employerInfo; }
    } 
    

    这是控制器中现有的端点代码,我无法更改。

    由于该方法中调用了两个服务调用,因此我无法理解如何编写一个生产者方法来模拟服务响应并构造JSON。

    这是我的制作人代码

    StudentInfo mockStudentsResponse = JUnitTestUtil
          .toObject(JUnitTestUtil.getFile("studentInfo.json"), StudentInfo .class); // This student info has two class objects inside it 1. ClassDetails and 2.MarksInfo 
        //How can I mock the response and to which service class
    

    任何想法都将不胜感激。

    0 回复  |  直到 4 年前
        1
  •  0
  •   Marcin Grzejszczak    4 年前

    您应该模拟控制器内的服务。当我说服务时,我指的是应用服务。控制器应该模拟应用程序服务。这样,您向控制器发送请求,然后该请求的处理在控制器中结束。它不会深入到任何其他层,更不用说在其他应用程序中被调用。

    例子

    @RestController
    class MyController {
      private final Service1 service1;
      private final Service2 service2;
    
    
      @GetMapping("/bla")
      String bla() {
        String a = service1.a();
        String b = service2.b(a);
        return a + b;
      }
    }
    

    那么,在基类中,您可以

    class MyBaseClass {
    
      Service1 service1 = Mockito.mock(Service1.class);
      Service2 service2 = Mockito.mock(Service2.class);
    
      @BeforeEach
      void setup() {
        Mockito.when(service1.a()).thenReturn("foo");
        Mockito.when(service2.b()).thenReturn("bar");
        RestAssuredMockMvc.standaloneSetup(new MyController(service1, service2));
      }
    }