WireMock as a standalone process

Stef Heyenrath edited this page May 19, 2018 · 6 revisions

WireMock as a standalone process

This is quite straight forward to launch a mock server within a console application.

Workaround for Microsoft.Owin.Host.HttpListener exception

Note that when using WireMock in a NET 4.5x, NET 4.6.x project, you can get this exception when running your console application:

Unhandled Exception: System.Exception: Service start failed with error: The server factory could not be located for > the given input: Microsoft.Owin.Host.HttpListener ---> System.MissingMemberException: The server factory could not be located for the given input: Microsoft.Owin.Host.HttpListener

The solution is to add the Microsoft.Owin.Host.HttpListener NuGet package to your hosting console application.

Option 1 : using the WireMock.Net.StandAlone library.

(https://www.nuget.org/packages/WireMock.Net.StandAlone/)

class Program
{
    static void Main(string[] args)
    {
        StandAloneApp.Start(args);

        Console.WriteLine("Press any key to stop the server");
        Console.ReadKey();
    }
}

Option 2 : using the WireMock.Net.StandAlone library using the settings object

class Program
{
    static void Main(string[] args)
    {
        // see source code for all the possible properties
        var settings = new FluentMockServerSettings
            {
                AllowPartialMapping=true,
                StartAdminInterface=true
            };
        StandAloneApp.Start(settings);

        Console.WriteLine("Press any key to stop the server");
        Console.ReadKey();
    }
}

Option 3 : coding yourself

static void Main(string[] args)
{
    int port;
    if (args.Length == 0 || !int.TryParse(args[0], out port))
        port = 8080;

    var server = FluentMockServer.Start(port);
    Console.WriteLine("FluentMockServer running at {0}", server.Port);

    server
        .Given(Request.Create().WithUrl(u => u.Contains("x")).UsingGet())
        .RespondWith(Response.Create()
            .WithStatusCode(200)
            .WithHeader("Content-Type", "application/json")
            .WithBody(@"{ ""result"": ""/x with FUNC 200""}"));

    server
        .Given(Request.Create().WithUrl("/*").UsingGet())
        .RespondWith(Response.Create()
            .WithStatusCode(200)
            .WithHeader("Content-Type", "application/json")
            .WithBody(@"{ ""msg"": ""Hello world!""}")
        );

    server
        .Given(Request.Create().WithUrl("/data").UsingPost().WithBody(b => b.Contains("e")))
        .RespondWith(Response.Create()
            .WithStatusCode(201)
            .WithHeader("Content-Type", "application/json")
            .WithBody(@"{ ""result"": ""data posted with FUNC 201""}"));

    server
        .Given(Request.Create().WithUrl("/data").UsingPost())
        .RespondWith(Response.Create()
            .WithStatusCode(201)
            .WithHeader("Content-Type", "application/json")
            .WithBody(@"{ ""result"": ""data posted with 201""}"));

    server
        .Given(Request.Create().WithUrl("/data").UsingDelete())
        .RespondWith(Response.Create()
            .WithStatusCode(200)
            .WithHeader("Content-Type", "application/json")
            .WithBody(@"{ ""result"": ""data deleted with 200""}"));

    Console.WriteLine("Press any key to stop the server");
    Console.ReadKey();

    Console.WriteLine("Displaying all requests");
    var allRequests = server.RequestLogs;
    Console.WriteLine(JsonConvert.SerializeObject(allRequests, Formatting.Indented));

    Console.WriteLine("Press any key to quit");
    Console.ReadKey();
}
You can’t perform that action at this time.
You signed in with another tab or window. Reload to refresh your session. You signed out in another tab or window. Reload to refresh your session.
Press h to open a hovercard with more details.