Best way to create an async child workflow

Hello, trying to write a unit test with async child workflows but the children array doesn’t seem to get populated with futures in the unit tests and thus the result is empty. Am I missing something in how I should be doing env.OnWorkflow(childWorkflow) so that it returns a future?

func ParentWorkflow(ctx workflow.Context, params ParentParams) (map[string]string, error) {
	activityoptions := workflow.ActivityOptions{
		// Set Activity Timeout duration
		ScheduleToCloseTimeout: workflows.GetActivityTimeout(),
	}
	ctx = workflow.WithActivityOptions(ctx, activityoptions)

	var getObjectsOutput *activities.GetObjectsOutput
	err := workflow.ExecuteActivity(ctx, GetObjects, activities.GetObjectsInput{names: params.names}).Get(ctx, &getObjectsOutput)
	if err != nil {
		Log(ctx).Error().Msgf("unable to get objects: %v", err)
		return nil, err
	}
	var objects = getObjectsOutput.Objects
	var children []workflow.Future
	for _, o := range objects {
		// ExecuteChildWorkflow asynchronously
		childWorkflowOptions := workflow.ChildWorkflowOptions{
			ParentClosePolicy:        enums.PARENT_CLOSE_POLICY_ABANDON,
			TaskQueue:                workers.GetTaskQueue(),
			WorkflowExecutionTimeout: 10 * workflows.GetActivityTimeout(),
		}
		ctx = workflow.WithChildOptions(ctx, childWorkflowOptions)
		workflow.Go(ctx, func(ctx workflow.Context) {
			children = append(children, workflow.ExecuteChildWorkflow(ctx, ChildWorkflow, Params{name: o.Name}))
		})
	}

	resultMap := make(map[string]string)
	var successCount, failureCount int

	for _, child := range children {
		var result *string
		if err := child.Get(ctx, &result); err != nil {
			Log(ctx).Error().Msgf("Child workflow failed: %v", err)
			failureCount++
			resultMap[result] = err.Error()
		} else {
			successCount++
			resultMap[result] = "Success"
		}
	}
	return resultMap, nil
}

func Test_ParentWorkflow(t *testing.T) {
	testSuite := testsuite.WorkflowTestSuite{}
	env := testSuite.NewTestWorkflowEnvironment()

	objects := []*object{activities.NewRandomObject(), activities.NewRandomObject()}
	names := []string{objects[0].Name, objects[1].Name}
	env.OnWorkflow(ChildWorkflow, mock.Anything, Params{name: names[0]}).Return(Params{name: names[0]}, nil)
	env.OnWorkflow(ChildWorkflow, mock.Anything, Params{name: names[1]}).Return(Params{name: names[1]}, nil)

	env.ExecuteWorkflow(workflow.ParentWorkflow, ParentParams{})

	assert.True(t, env.IsWorkflowCompleted())
	assert.NoError(t, env.GetWorkflowError())
	var result map[string]string
	env.GetWorkflowResult(&result)
	assert.Equal(t, 2, len(result))
	assert.Equal(t, "Success", result[names[0]])
	assert.Equal(t, "Success", result[names[1]])
}

Aren’t objects empty?

Sorry, removed the object retrieval when I was sanitizing the code (edited). Can confirm by debugging that objects is populated and its reaching here

workflow.Go(ctx, func(ctx workflow.Context) {
	children = append(children, workflow.ExecuteChildWorkflow(ctx, WorkflowTypes[params.WorkflowName].Workflow, HostWorkflowParams{
		name: d.Name,
	}))
})

The parent workflow successfully completes with no errors

I usually put Anything into child parameters matching to see if the problem is related to parameter matching.

Any recommendation for .NET please?