модульный тест golang, сеанс aws или служба emr - PullRequest
0 голосов
/ 04 ноября 2019

Я написал код, который будет печатать состояние кластера EMR на основе идентификатора кластера. Но мне сложно во время юнит-тестирования.

emrinterface.EMR:

type EMR struct {
    Client emriface.EMRAPI
}

func NewEMR() *EMR {
    sess := session.CreateNewSession()
    return &EMR{
        Client: emr.New(sess),
    }
}

состояние кластера печати на основе идентификатора кластера:

func GetClusterStatus(e entities.Cluster) (string, error) {
    clusterID := ClusterID(e)

    emrService := emrinterface.NewEMR()
    clusterDetails, err := emrService.Client.DescribeCluster(&emr.DescribeClusterInput{
        ClusterId: clusterID})
    if err != nil {
        return "error", err
    }

    clusterStatus := *clusterDetails.Cluster.Status.State

    return fmt.Sprintf(clusterStatus), nil
}

main

func main() {
    lambda.Start(GetClusterStatus)
}

модульный тест:

func setup() *emrtestutils.MockEMR {
    return &emrtestutils.MockEMR{}
}

func TestGetClusterStatus(t *testing.T) {
    testCases := []struct {
        entities.Cluster
        status string
        err    error
    }{
        {entities.Cluster{ClusterID: "j-dfdslkj3kl213kj"}, "STARTING", nil},
    }

    for _, testCase := range testCases {
        mockEMR := setup()
        mockEMR.On("MockEMRDescribeCluster",
        &emr.DescribeClusterInput{
        ClusterId: aws.String("jdfdslkj3kl213kj")}).Return("STARTING", testCase.err)
        res, err := GetClusterStatus(testCase.Cluster)
        fmt.Println(err)
        assert.Equal(t, res, testCase.status)
    }
}
...