### Question:
DeleteExecutor extends AbstractDMLBaseExecutor<T, S> { @Override protected TableRecords beforeImage() throws SQLException { SQLDeleteRecognizer visitor = (SQLDeleteRecognizer) sqlRecognizer; TableMeta tmeta = getTableMeta(visitor.getTableName()); ArrayList<List<Object>> paramAppenderList = new ArrayList<>(); String selectSQL = buildBeforeImageSQL(visitor, tmeta, paramAppenderList); return buildTableRecords(tmeta, selectSQL, paramAppenderList); } DeleteExecutor(StatementProxy<S> statementProxy, StatementCallback<T,S> statementCallback,
                          SQLRecognizer sqlRecognizer);   }### Answer:
@Test public void testBeforeImage() throws SQLException { Assertions.assertNotNull(deleteExecutor.beforeImage()); String sql = "delete from t"; List<SQLStatement> asts = SQLUtils.parseStatements(sql, JdbcConstants.MYSQL); MySQLDeleteRecognizer recognizer = new MySQLDeleteRecognizer(sql, asts.get(0)); deleteExecutor = new DeleteExecutor(statementProxy, (statement, args) -> null, recognizer); Assertions.assertNotNull(deleteExecutor.beforeImage()); }