Beispiel #1
0
    /// <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);
        }
    }