doujingqu3030
2018-03-08 20:33
浏览 160
已采纳

Golang-解析yaml文件并检查对象的单元测试

I want to test parse of yaml and test it via unit test I’ve create structs that with appropriate types but the assertion is always falid, I try with the following code which failed constantly

This is the yaml content which is valid (maybe with the copy it changed but I was able to parse it correctly)

ID: demo
version: 0.0.5

dep:
 - name: db
   path: mtb
   requires:
    - name: vi_db


 - name: srv
   path: srv1
   properties:
     LOG_LEVEL: "info"


   parameters:
     mem: 12G
   requires:
     - name: db
       properties:

This is the test I was created

    func Test_parseFile(t *testing.T) {

        yamlfile, err := ioutil.ReadFile("./testdata/file.yaml")

        type Properties map[string]string
        type Parameters map[string]interface{}

        type Modules struct {
            Name string
            Path string `yaml:"path,omitempty"`
            Requires   []Requires `yaml:"requires,omitempty"`
            Properties Properties `yaml:"properties,omitempty"`
        }

   type Requires struct {
      Name       string     `yaml:"name,omitempty"`
      Properties Properties `yaml:"properties,omitempty"`
    }



    type args struct {
        contentFile []byte
    }


     tests := []struct {
            name        string
            args        args
            wantOut     Properties
            wantNoTests bool
            wantErr     bool
        }{
            {
                name: "test",
                args: args{
                    contentFile: yamlfile,
                },

                wantOut: Modules{
                    Name: "srv",
                    Path: "srv1",

                    Properties{
                        "LOG_LEVEL":       "info",
                        "DEBUG_LOG_LEVEL": "ALL",
                    },
                    Parameters:{
                        "mem":"12G",
                    },
                    Requires: {
                        name: "db",
                        Properties{
                            "CONFIG": '[tomcontext.xml:
                            {"service_nameDB" : "~{con-name}"}]'   
                        },
                    },
                },

                wantNoTests: true,
                wantErr:     true,
            },
        }

This is the assertion code

for _, tt := range tests {
        t.Run(tt.name, func(t *testing.T) {

            gotOut := ParseFile(tt.args.contentFile)


            if !reflect.DeepEqual(gotOut.Modules[1], tt.wantOut) {

                t.Errorf("parseFile() = %v, want %v", gotOut.Modules[2], tt.wantOut)
            }

The error is :

parseFile() = map[], want map[LOG_LEVEL:info DEBUG_LOG_LEVEL:ALL]

How should I overcome it to check the module properties ?

The ParseFile method is just err := yaml.Unmarshal([]byte(yamlFile), &yamlconent)

  • 写回答
  • 好问题 提建议
  • 追加酬金
  • 关注问题
  • 邀请回答

1条回答 默认 最新

相关推荐 更多相似问题