Vra

Ek geskep sommige POX dienste gebruik te maak van die res Starter kit. Aanvanklik was dit 'n bietjie ingewikkeld om die eenheid toetse vir die diens laag te skep, maar op die ou end, is dit goed ontwerpte en ek daarin slaag om gespot die konteks en stel verwagtinge.

Maar, ek begin met die kliënt kant nou, en Ek het 'n paar probleme uitzoeken hoe om dinge te bespot. Dit is nie so reguit vorentoe.

So, ek het hierdie monster metode wat plaas via HTTP sommige data met behulp van 'n datacontract en XML as vervoer.

public class ServiceClient: IService

{
    private const string uri_template = "http://{0}:{1}/SomeService.svc/";
    private readonly HttpClient http = new HttpClient();

    public ServiceClient(string host, int port)
    {
        http.BaseAddress = new Uri(string.Format(uri_template , host, port));
    }

    public void Create(MyDataContract my_data_contract)
    {
        var content = HttpContentExtensions
                        .CreateDataContract(
                          my_data_contract, 
                          Encoding.Default, 
                          "text/xml", 
                          null);
        var response = http.Post("Create", content);
        if (response.StatusCode != HttpStatusCode.Created) {
            throw new Exception("something is not right");
        }
    }
}

Hierdie metode is besig en inderdaad plaas die data en korrek serializeren.

Wat ek wil doen, is om eenheid toets dit.

My vrae is:

  1. Hoe maak ek stompies / spot vir HttpContextExtensions die wete dat dit nie enige koppelvlak beteken implementeer?

  2. En vir HttpClient? dit is die ergste, want dit is vol uitbreiding metodes elders omskryf (Post en dies meer metodes is uitbreidings).

In 2. dink ek ek kan vashou aan 'Stuur' en dit is oorlaai, maar dan is die dieselfde probleem as in 1

Wat ek gedink om te doen, is om koppelvlakke te pak vir HttpContextExtensions en HttpClient, maak 'n kinders vir elkeen en implementeer die koppelvlakke te delegeer aan die ouer, en dan met behulp van die interfaces in my kode.

Maar dit is 'n baie werk IMHO.

Ek gebruik RhinoMocks as my spot raamwerk so ek kan nie bespot / stomp beton klasse, en ek wil graag daarby te hou, want ek dink regtig dat gespot beton klasse is nie baie elegant.

So, is daar 'n skoonmaker / vinniger / slimmer manier om eenheid toets kode soos die bogenoemde?

PD: Dit is vir WCF Starter Kit voorskou 2

Was dit nuttig?

Oplossing

As jy regtig wil om dit code bespot, 'n benadering wat vir hierdie scenario kan werk is om 'n HttpClient byvoorbeeld ontvang in die ServiceClient klas. Die HttpClient klas bevat 'n verwerking pyplyn wat jy kan aanpas met persoonlike hanteerders. Vir jou toetse, kan jy basies spuit 'n hanteerder in wat httpclient byvoorbeeld om 'n gespot reaksie op die toets terug te keer voor die werklike diens genoem in die laaste hanteerder (Vervoer Stage). Neem 'n blik op hierdie post om 'n idee oor hoe dit gedoen kan word geïmplementeer te kry,

http://weblogs.asp.net/cibrax/archive/2009/03/18/negotiating-a-saml-token-for-rest-clients-with-httpclient.aspx

Groete, Pablo.

Ander wenke

Ek het die meeste van die HttpClient kode. Pablo se voorstel is wat ek gedoen het in die eenheid toetse -. Sien FixedTransport.cs in die bron zip

Gelisensieer onder: CC-BY-SA met toeskrywing
Nie verbonde aan StackOverflow
scroll top