我写了一个代码,该代码将根据集群ID打印EMR集群状态。但是在进行单元测试时我很难过。
emrinterface.EMR:
type EMR struct {
Client emriface.EMRAPI
}
func NewEMR() *EMR {
sess := session.CreateNewSession()
return &EMR{
Client: emr.New(sess),}
}
根据群集ID打印群集状态:
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
}
主要
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)
}
}