the-other-tim-brown commented on code in PR #9482:
URL: https://github.com/apache/hudi/pull/9482#discussion_r1306318716


##########
hudi-gcp/src/main/java/org/apache/hudi/gcp/bigquery/BigQuerySyncTool.java:
##########
@@ -52,34 +57,55 @@ public class BigQuerySyncTool extends HoodieSyncTool {
 
   private static final Logger LOG = 
LoggerFactory.getLogger(BigQuerySyncTool.class);
 
-  public final BigQuerySyncConfig config;
-  public final String tableName;
-  public final String manifestTableName;
-  public final String versionsTableName;
-  public final String snapshotViewName;
+  private final BigQuerySyncConfig config;
+  private final String tableName;
+  private final String manifestTableName;
+  private final String versionsTableName;
+  private final String snapshotViewName;
+  private final ManifestFileWriter manifestFileWriter;
+  private final HoodieBigQuerySyncClient bqSyncClient;
+  private final HoodieTableMetaClient metaClient;
+  private final BigQuerySchemaResolver bqSchemaResolver;
 
   public BigQuerySyncTool(Properties props) {
-    super(props);
+    // will build file writer, client, etc. from configs
+    this(props, null, null, null, null);
+  }
+
+  @VisibleForTesting // allows us to pass in mocks for the writer and client
+  BigQuerySyncTool(Properties properties, ManifestFileWriter 
manifestFileWriter, HoodieBigQuerySyncClient providedBqSyncClient, 
HoodieTableMetaClient providedMetaClient,
+                   BigQuerySchemaResolver providedBqSchemaResolver) {
+    super(properties);
     this.config = new BigQuerySyncConfig(props);
     this.tableName = config.getString(BIGQUERY_SYNC_TABLE_NAME);
     this.manifestTableName = tableName + "_manifest";
     this.versionsTableName = tableName + "_versions";
     this.snapshotViewName = tableName;
+    this.bqSyncClient = providedBqSyncClient == null ? new 
HoodieBigQuerySyncClient(config) : providedBqSyncClient;
+    // reuse existing meta client if not provided (only test cases will 
provide their own meta client)

Review Comment:
   See my above question, dependency injection is a common practice but Hudi 
makes it hard to follow this due to its constraints. Can we consider adopting 
some patterns that are more friendly to testing so we can adopt unit testing 
over functional testing in general?



-- 
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: commits-unsubscr...@hudi.apache.org

For queries about this service, please contact Infrastructure at:
us...@infra.apache.org

Reply via email to