标签: pact-net

我应该测试合同中的所有枚举值吗?

我对是否应该考虑某种类型的测试功能或合同有疑问。

假设我有一个像 /getToolType 这样的 API,它接受一个 {object" "myObject"} 作为输入,并以 {type: "[az]+"} 的形式返回 type

客户端和服务器之间一致认为返回的类型将匹配一组字符串,比如 [hammer|knife|screwdriver],所以消费者决定在枚举中解析它们,当返回的类型未知时使用回退值。

消费者是否应该为每种类型(锤子、刀子、螺丝刀)包含一个测试用例,以确保生产者仍然遵守它总是返回的协议,例如,当使用锤子对象调用 /getToolType 时,小写字符串“hammer” ? 或者你会认为这样的测试用例是功能性的吗?为什么?

datacontracts pact pact-java pact-net

5
推荐指数
2
解决办法
1345
查看次数

PACT .NET 消费者测试:灵活长度数组

我正在使用 pactNet 来测试一个 API,它应该返回一个灵活长度的数组。

如果我调用“myApi/items/”,它应该返回一个消费者不知道确切尺寸的项目列表。所以答案应该是这样的:

    [
        {
            "id": "1",
            "description": "foo"
        },
        {
            "id": "2",
            "description": "foo2"
        },
        {
            "id": "3",
            "description": "foo3"
        }
    ]
Run Code Online (Sandbox Code Playgroud)

或这个:

    [
        {
            "id": "4",
            "description": "foo4"
        },
        {
            "id": "2",
            "description": "foo2"
        }
    ]
Run Code Online (Sandbox Code Playgroud)

如何为此交互创建合同?

文档是在Ruby中的例子,但是我无法找到C#中的等价物。

我正在使用 pactNet 2.1.1 版。

编辑:这是一个示例,它应该是什么样子。我想知道的是如何声明主体应该包含一个长度灵活的项目数组。

[Test]
    public void GetAllItems()
    {
        //Arrange
        _mockProviderService
            .Given("There are items")
            .UponReceiving("A GET request to retrieve the items")
            .With(new ProviderServiceRequest
            {
                Method = HttpVerb.Get,
                Path = "/items/",
                Headers = new Dictionary<string, object> …
Run Code Online (Sandbox Code Playgroud)

c# contract consumer pact pact-net

5
推荐指数
1
解决办法
1319
查看次数

验证 PactNet 中的类型

我正在测试微服务,并使用PactNet来创建和验证契约。我发现测试太脆弱,因为验证者正在检查确切的值而不是验证类型。

例如,我正在针对 GitHub API 进行测试并且测试有效。如果添加新的Repo,则该public_repos值加一,测试失败。

有人用它来检查类型而不是具体值吗?

这是验证码:

[Test]
public void VerifyPact()
{

    // Arrange.
    var pactVerifier = new PactVerifier(() => { }, () => { });
    pactVerifier.ProviderState("There is call with the name 'karlgjertsen'");

    // Act.
    using (var client = new HttpClient { BaseAddress = new Uri("https://api.github.com/users/karlgjertsen") })
    {

        client.DefaultRequestHeaders.Accept.Clear();
        client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));
        client.DefaultRequestHeaders.Add("User-Agent", "Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.2; WOW64; Trident / 6.0)");

        // Assert.
        pactVerifier
            .ServiceProvider("GitHub API", client)
            .HonoursPactWith("Pact Test")
            .PactUri(@"C:\Pact\pacts\pact_test-git_api.json")
            .Verify();

    }

}
Run Code Online (Sandbox Code Playgroud)

这是 …

c# testing microservices pact pact-net

4
推荐指数
1
解决办法
3017
查看次数