wizardzhang commented on code in PR #4603:
URL: https://github.com/apache/eventmesh/pull/4603#discussion_r1415547823


##########
eventmesh-connectors/eventmesh-connector-wechat/src/test/java/org/apache/eventmesh/connector/wechat/sink/connector/WeChatSinkConnectorTest.java:
##########
@@ -95,31 +109,43 @@ public void setUp() throws Exception {
         
Mockito.doReturn(sendMessageRequestCall).when(okHttpClient).newCall(Mockito.argThat(sendMessageMatcher));
         
Mockito.doReturn(sendMessageResponse).when(sendMessageRequestCall).execute();
 
-        weChatSinkConnector = new WeChatSinkConnector();
-        WeChatSinkConfig weChatSinkConfig = (WeChatSinkConfig) 
ConfigUtil.parse(weChatSinkConnector.configClass());
-        weChatSinkConnector.init(weChatSinkConfig);
-        Field clientField = 
ReflectionSupport.findFields(weChatSinkConnector.getClass(),
-            (f) -> f.getName().equals("okHttpClient"),
-            HierarchyTraversalMode.BOTTOM_UP).get(0);
-        clientField.setAccessible(true);
-        clientField.set(weChatSinkConnector, okHttpClient);
-        weChatSinkConnector.start();
+        List<ConnectRecord> records = new ArrayList<>();
+        RecordPartition partition = new RecordPartition();
+        RecordOffset offset = new RecordOffset();
+        ConnectRecord connectRecord = new ConnectRecord(partition, offset,
+            System.currentTimeMillis(), "Hello, 
EventMesh!".getBytes(StandardCharsets.UTF_8));
+        records.add(connectRecord);
+
+        weChatSinkConnector.put(records);
+        verify(okHttpClient, times(2)).newCall(any(Request.class));
     }
 
     @Test
-    public void testSendMessageToWeChat() throws Exception {
-        final int times = 1;
-        List<ConnectRecord> records = new ArrayList<>();
-        for (int i = 0; i < times; i++) {
-            RecordPartition partition = new RecordPartition();
-            RecordOffset offset = new RecordOffset();
-            ConnectRecord connectRecord = new ConnectRecord(partition, offset,
-                System.currentTimeMillis(), "Hello, 
EventMesh!".getBytes(StandardCharsets.UTF_8));
-            records.add(connectRecord);
-        }
+    public void testSendMessageToWeChatAbnormally() throws Exception {
+        Request sendMessageRequest = new 
Request.Builder().url("https://api.weixin.qq.com/cgi-bin/message/template/send";).build();
+        String sendMessageResponseJson = 
"{\"errcode\":42001,\"errmsg\":\"access_token expired rid: 
656e8793-061949b5-738cb8f4\"}";
+        ResponseBody sendMessageBody = 
ResponseBody.create(MediaType.parse("application/json; charset=utf-8"), 
sendMessageResponseJson);
+        Response sendMessageResponse = new Response.Builder()
+            .code(200)
+            .protocol(Protocol.HTTP_1_0)
+            .request(sendMessageRequest)
+            .body(sendMessageBody)
+            .message("ok")
+            .build();
+        ArgumentMatcher<Request> sendMessageMatcher = (anyRequest) ->
+            
sendMessageRequest.url().encodedPath().startsWith(anyRequest.url().encodedPath());
+        Call sendMessageRequestCall = Mockito.mock(Call.class);
+        
Mockito.doReturn(sendMessageRequestCall).when(okHttpClient).newCall(Mockito.argThat(sendMessageMatcher));
+        
Mockito.doReturn(sendMessageResponse).when(sendMessageRequestCall).execute();
 
+        RecordPartition partition = new RecordPartition();
+        RecordOffset offset = new RecordOffset();
+        List<ConnectRecord> records = new ArrayList<>();
+        ConnectRecord connectRecord = new ConnectRecord(partition, offset,
+            System.currentTimeMillis(), "Hello, 
EventMesh!".getBytes(StandardCharsets.UTF_8));
+        records.add(connectRecord);
         weChatSinkConnector.put(records);
-        verify(okHttpClient, times(times + 1)).newCall(any(Request.class));
+        verify(okHttpClient, times(2)).newCall(any(Request.class));

Review Comment:
    weChatSinkConnector.sendMessage() method throw IllegalAccessException then  
weChatSinkConnector.put() catch the exception, i want to test 
weChatSinkConnector.sendMessage() ,but it is a private method ,i used reflect 
api to invoke the weChatSinkConnector.sendMessage() and then throw 
InvocationTargetException, IllegalAccessException  has been transfer to 
InvocationTargetException, so the code will like this 
   
![image](https://github.com/apache/eventmesh/assets/11482231/4f617b3c-946d-4f0a-a7de-576ab2f0cf11)
   i think it looks a little strange
   
   
WeChatSinkConnector.sendMessage()方法抛出IllegalAccessException然后weChatSinkConnector.put()捕捉异常,我想测试weChatSinkConnector.sendMessage(),但它是一个私有方法,我使用反射API调用weChatSinkConnector.sendMessage(),然后抛出InvocationTargetException,IllegalAccessException已经传递给InvocationTargetException,所以代码将如下所示。
   我觉得它看起来有点奇怪
   



##########
eventmesh-connectors/eventmesh-connector-wechat/src/test/java/org/apache/eventmesh/connector/wechat/sink/connector/WeChatSinkConnectorTest.java:
##########
@@ -95,31 +109,43 @@ public void setUp() throws Exception {
         
Mockito.doReturn(sendMessageRequestCall).when(okHttpClient).newCall(Mockito.argThat(sendMessageMatcher));
         
Mockito.doReturn(sendMessageResponse).when(sendMessageRequestCall).execute();
 
-        weChatSinkConnector = new WeChatSinkConnector();
-        WeChatSinkConfig weChatSinkConfig = (WeChatSinkConfig) 
ConfigUtil.parse(weChatSinkConnector.configClass());
-        weChatSinkConnector.init(weChatSinkConfig);
-        Field clientField = 
ReflectionSupport.findFields(weChatSinkConnector.getClass(),
-            (f) -> f.getName().equals("okHttpClient"),
-            HierarchyTraversalMode.BOTTOM_UP).get(0);
-        clientField.setAccessible(true);
-        clientField.set(weChatSinkConnector, okHttpClient);
-        weChatSinkConnector.start();
+        List<ConnectRecord> records = new ArrayList<>();
+        RecordPartition partition = new RecordPartition();
+        RecordOffset offset = new RecordOffset();
+        ConnectRecord connectRecord = new ConnectRecord(partition, offset,
+            System.currentTimeMillis(), "Hello, 
EventMesh!".getBytes(StandardCharsets.UTF_8));
+        records.add(connectRecord);
+
+        weChatSinkConnector.put(records);
+        verify(okHttpClient, times(2)).newCall(any(Request.class));
     }
 
     @Test
-    public void testSendMessageToWeChat() throws Exception {
-        final int times = 1;
-        List<ConnectRecord> records = new ArrayList<>();
-        for (int i = 0; i < times; i++) {
-            RecordPartition partition = new RecordPartition();
-            RecordOffset offset = new RecordOffset();
-            ConnectRecord connectRecord = new ConnectRecord(partition, offset,
-                System.currentTimeMillis(), "Hello, 
EventMesh!".getBytes(StandardCharsets.UTF_8));
-            records.add(connectRecord);
-        }
+    public void testSendMessageToWeChatAbnormally() throws Exception {
+        Request sendMessageRequest = new 
Request.Builder().url("https://api.weixin.qq.com/cgi-bin/message/template/send";).build();
+        String sendMessageResponseJson = 
"{\"errcode\":42001,\"errmsg\":\"access_token expired rid: 
656e8793-061949b5-738cb8f4\"}";
+        ResponseBody sendMessageBody = 
ResponseBody.create(MediaType.parse("application/json; charset=utf-8"), 
sendMessageResponseJson);
+        Response sendMessageResponse = new Response.Builder()
+            .code(200)
+            .protocol(Protocol.HTTP_1_0)
+            .request(sendMessageRequest)
+            .body(sendMessageBody)
+            .message("ok")
+            .build();
+        ArgumentMatcher<Request> sendMessageMatcher = (anyRequest) ->
+            
sendMessageRequest.url().encodedPath().startsWith(anyRequest.url().encodedPath());
+        Call sendMessageRequestCall = Mockito.mock(Call.class);
+        
Mockito.doReturn(sendMessageRequestCall).when(okHttpClient).newCall(Mockito.argThat(sendMessageMatcher));
+        
Mockito.doReturn(sendMessageResponse).when(sendMessageRequestCall).execute();
 
+        RecordPartition partition = new RecordPartition();
+        RecordOffset offset = new RecordOffset();
+        List<ConnectRecord> records = new ArrayList<>();
+        ConnectRecord connectRecord = new ConnectRecord(partition, offset,
+            System.currentTimeMillis(), "Hello, 
EventMesh!".getBytes(StandardCharsets.UTF_8));
+        records.add(connectRecord);
         weChatSinkConnector.put(records);
-        verify(okHttpClient, times(times + 1)).newCall(any(Request.class));
+        verify(okHttpClient, times(2)).newCall(any(Request.class));

Review Comment:
    weChatSinkConnector.sendMessage() method throw IllegalAccessException then  
weChatSinkConnector.put() catch the exception, i want to test 
weChatSinkConnector.sendMessage() ,but it is a private method ,i used reflect 
api to invoke the weChatSinkConnector.sendMessage() and then throw 
InvocationTargetException, IllegalAccessException  has been transfer to 
InvocationTargetException, so the code will like this 
   
![image](https://github.com/apache/eventmesh/assets/11482231/4f617b3c-946d-4f0a-a7de-576ab2f0cf11)
   i think it looks a little strange
   
   
WeChatSinkConnector.sendMessage()方法抛出IllegalAccessException然后weChatSinkConnector.put()捕捉异常,我想测试weChatSinkConnector.sendMessage(),但它是一个私有方法,我使用反射API调用weChatSinkConnector.sendMessage(),然后抛出InvocationTargetException,IllegalAccessException已经传递给InvocationTargetException,所以代码将如下所示。
   我觉得它看起来有点奇怪
   



-- 
This is an automated message from the Apache Git Service.
To respond to the message, please log on to GitHub and use the
URL above to go to the specific comment.

To unsubscribe, e-mail: [email protected]

For queries about this service, please contact Infrastructure at:
[email protected]


---------------------------------------------------------------------
To unsubscribe, e-mail: [email protected]
For additional commands, e-mail: [email protected]

Reply via email to