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

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

WBOY
Lepaskan: 2024-02-11 18:15:08
ke hadapan
529 orang telah melayarinya

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,
            ],
        ];
Salin selepas log masuk

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"),
        }),
    })
Salin selepas log masuk

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

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

Salin selepas log masuk

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)
}
Salin selepas log masuk

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,
        })
Salin selepas log masuk

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!

sumber:stackoverflow.com
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan