Ich teste Mikro-Dienste und ich verwende PactNet, um Pakte zu erstellen und zu validieren. Ich stelle fest, dass die Tests zu spröde sind, da der Verifizierer nach genauen Werten sucht und die Typen nicht überprüft.Validieren Sie Typen in PactNet
Zum Beispiel teste ich gegen die GitHub API und der Test funktioniert. Wenn ein neuer Repo hinzugefügt wird, erhöht sich der Wert public_repos
um eins und der Test schlägt fehl.
Verwendet jemand dies, um die Typen anstelle der konkreten Werte zu überprüfen? Hier
ist der Verifizierungscode:
[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();
}
}
Und hier ist die PACT-Datei.
{
"provider": {
"name": "GitHub API"
},
"consumer": {
"name": "PACT Test"
},
"interactions": [
{
"description": "A GET request for user deatils for 'karlgjertsen'",
"provider_state": "There is call with the name 'karlgjertsen'",
"request": {
"method": "get",
"path": "https://stackoverflow.com/users/karlgjertsen",
"headers": {
"Accept": "application/json"
}
},
"response": {
"status": 200,
"headers": {
"Content-Type": "application/json; charset=utf-8"
},
"body": {
"login": "karlgjertsen",
"id": 4457667,
"avatar_url": "https://avatars.githubusercontent.com/u/4457667?v=3",
"gravatar_id": "",
"url": "https://api.github.com/users/karlgjertsen",
"html_url": "https://github.com/karlgjertsen",
"followers_url": "https://api.github.com/users/karlgjertsen/followers",
"following_url": "https://api.github.com/users/karlgjertsen/following{/other_user}",
"gists_url": "https://api.github.com/users/karlgjertsen/gists{/gist_id}",
"starred_url": "https://api.github.com/users/karlgjertsen/starred{/owner}{/repo}",
"subscriptions_url": "https://api.github.com/users/karlgjertsen/subscriptions",
"organizations_url": "https://api.github.com/users/karlgjertsen/orgs",
"repos_url": "https://api.github.com/users/karlgjertsen/repos",
"events_url": "https://api.github.com/users/karlgjertsen/events{/privacy}",
"received_events_url": "https://api.github.com/users/karlgjertsen/received_events",
"type": "User",
"site_admin": false,
"name": "Karl Gjertsen",
"company": "infiniforms.io",
"blog": "http://www.karlgjertsen.com",
"location": "UK",
"email": null,
"hireable": null,
"bio": null,
"public_repos": 1,
"public_gists": 0,
"followers": 0,
"following": 0,
"created_at": "2013-05-17T14:05:30Z",
"updated_at": "2016-03-07T19:39:58Z"
}
}
}
],
"metadata": {
"pactSpecificationVersion": "1.1.0"
}
}