Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Pakatan ujian pengguna dalam Go. Masalah dengan fungsi dsl.Match

Pakatan ujian pengguna dalam Go. Masalah dengan fungsi dsl.Match

WBOY
WBOYke hadapan
2024-02-11 18:15:08449semak imbas

Go 中的 Pact 消费者测试。 dsl.Match 函数的问题

Editor PHP Apple akan berkongsi dengan anda hari ini soalan tentang ujian pengguna Pact dalam Go. Apabila menggunakan Pact untuk ujian pengguna, kami sering menggunakan fungsi dsl.Match untuk memadankan medan tertentu dalam permintaan dan respons. Walau bagaimanapun, kami mungkin menghadapi beberapa masalah, seperti medan tidak sepadan dengan betul. Artikel ini akan menyelidiki isu ini dan menyediakan penyelesaian untuk membantu anda menangani cabaran ujian pengguna Pact dengan lebih baik.

Kandungan soalan

Saya sedang menulis ujian pengguna pakatan menggunakan go. Apabila saya menentukan interaksi saya perlu menambah objek tindak balas yang diharapkan. Perkhidmatan pembekal ditulis dalam php dan ini adalah jawapan yang saya harapkan:

return  [
            'status' => 'success',
            'data' => [
                'configuration' => associative array,
                'undeploy_configuration' => associative array,
                'meta_data' => associative array,
                'undeploy_lora_app_key' => string,
            ],
        ];

Ini adalah objek yang saya cipta dalam go untuk mewakili respons yang sepatutnya saya dapat:

deviceconfigurationresponse := dsl.like(map[string]interface{}{
        "status": "success",
        "data": dsl.like(map[string]interface{}{
            "configuration": dsl.mapmatcher{
                "config1": dsl.string("value1"),
                "config2": dsl.string("value2"),
            },
            "undeploy_configuration": dsl.mapmatcher{
                "undeploy1": dsl.string("value3"),
                "undeploy2": dsl.string("value4"),
            },
            "meta_data": dsl.mapmatcher{
                "meta1": dsl.string("info1"),
                "meta2": dsl.string("info2"),
            },
            "undeploy_lora_app_key": dsl.string("example_undeploy_lora_app_key"),
        }),
    })

Namun, apabila saya menjalankan ujian, saya mendapat ralat ini:

--- fail: testgetdeviceconfiguration (1.79s)
panic: match: unhandled type: interface {} [recovered]
        panic: match: unhandled type: interface {}

Ini adalah kod lengkap:

func TestGetDeviceConfiguration(t *testing.T) {
    // Create Pact client
    pact := &dsl.Pact{
        Consumer: "consumer",
        Provider: "provider",
        PactDir:  "./pacts",
    }

    defer pact.Teardown()

    deviceConfigurationResponse := dsl.Like(map[string]interface{}{
        "status": "success",
        "data": dsl.Like(map[string]interface{}{
            "configuration": dsl.MapMatcher{
                "config1": dsl.String("value1"),
                "config2": dsl.String("value2"),
            },
            "undeploy_configuration": dsl.MapMatcher{
                "undeploy1": dsl.String("value3"),
                "undeploy2": dsl.String("value4"),
            },
            "meta_data": dsl.MapMatcher{
                "meta1": dsl.String("info1"),
                "meta2": dsl.String("info2"),
            },
            "undeploy_lora_app_key": dsl.String("example_undeploy_lora_app_key"),
        }),
    })

    // Define the expected interaction with the provisioning-service
    value := "123456789"
    pact.
        AddInteraction().
        Given("Device configuration exists for the given device ID").
        UponReceiving("A request to get device configuration").
        WithRequest(dsl.Request{
            Method:  "GET",
            Path:    dsl.String(fmt.Sprintf("/api/prov/state/%s/configuration", value)),
            Headers: dsl.MapMatcher{"Accept": dsl.String("application/json")},
        }).
        WillRespondWith(dsl.Response{
            Status:  200,
            Headers: dsl.MapMatcher{"Content-Type": dsl.String("application/json")},
            Body:    dsl.Match(deviceConfigurationResponse),
        })

    // Test the OnSessionEstablished function
    var test = func() error {
        cache := new(CacheMock)
        deviceConfigGetter := new(DeviceConfigGetterMock)

        _, err := GetDeviceConfiguration(value)

        cache.AssertExpectations(t)
        deviceConfigGetter.AssertExpectations(t)

        return err
    }

    // Verify the interaction with the provider
    var err = pact.Verify(test)
    assert.NoError(t, err)
}

Penyelesaian

Kaedah yang anda gunakan (match)采用带有结构标记注释的结构(请参阅https://github.com/pact-foundation/pact-go#auto-generate-matchers-from-struct-tags) 指定如何在结构应该匹配。您已经手动提供了具有正确匹配器的结构,因此根本不需要将其包装在 match dalam.

Sesuatu seperti ini sepatutnya berfungsi:

        WillRespondWith(dsl.Response{
            Status:  200,
            Headers: dsl.MapMatcher{"Content-Type": dsl.String("application/json")},
            Body:    deviceConfigurationResponse,
        })

Atas ialah kandungan terperinci Pakatan ujian pengguna dalam Go. Masalah dengan fungsi dsl.Match. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Artikel ini dikembalikan pada:stackoverflow.com. Jika ada pelanggaran, sila hubungi admin@php.cn Padam