/// <summary> /// Creates a tester. /// </summary> public ConformanceApiTester(ConformanceApiTesterSettings settings) { _ = settings ?? throw new ArgumentNullException(nameof(settings)); m_tests = settings.Tests ?? throw new ArgumentException($"{nameof(settings.Tests)} is required.", nameof(settings)); m_api = settings.Api ?? throw new ArgumentException($"{nameof(settings.Api)} is required.", nameof(settings)); m_jsonSerializer = settings.JsonSerializer ?? throw new ArgumentException($"{nameof(settings.JsonSerializer)} is required.", nameof(settings)); m_httpClient = settings.HttpClient; var sameNameTests = m_tests.GroupBy(x => x.Test).FirstOrDefault(x => x.Count() != 1); if (sameNameTests != null) { throw new ArgumentException($"Multiple tests have the name {sameNameTests.First().Test}"); } foreach (var testsPerMethod in m_tests.GroupBy(x => x.Method).Select(x => x.ToList())) { for (var i = 0; i < testsPerMethod.Count; i++) { for (var j = i + 1; j < testsPerMethod.Count; j++) { if (ServiceObjectUtility.DeepEquals(testsPerMethod[i].Request, testsPerMethod[j].Request)) { throw new ArgumentException($"Tests must not have the same method name and request data, e.g. {testsPerMethod[i].Test} and {testsPerMethod[j].Test}."); } } } } }
public async Task RunTest(string testName) { var settings = new ConformanceApiTesterSettings { Tests = m_tests, Api = new HttpClientConformanceApi(new HttpClientServiceSettings { HttpClient = m_httpClient, ContentSerializer = m_contentSerializer }), JsonSerializer = JsonSerializer, HttpClient = m_httpClient, }; var test = m_tests.Single(x => x.Test == testName); var result = await new ConformanceApiTester(settings).RunTestAsync(test).ConfigureAwait(false); if (result.Status != ConformanceTestStatus.Pass) { Assert.Fail(result.Message); } }