Come testare l'unità di un client web?

3

Ho molti problemi a capire come testare il mio client web.

Ho appena finito un progetto usando TDD per la prima volta - questo progetto non ha dipendenze esterne come chiamate API o database, era puro codice C #. Ho sicuramente visto i benefici dell'uso di TDD e mi piacerebbe continuare a praticarlo.

Il mio prossimo progetto prevede la scrittura di un client SOAP. Sto facendo fatica a superare il primo test che utilizza un semplice IClient che accede correttamente all'API.

Ecco l'interfaccia di IClient:

public interface IClient
{
    bool IsLoggedIn { get; }
    bool Login(out string error);
}

Non ho idea di come andrei a testare questo. Sto pensando che il metodo di test unitario sarebbe qualcosa come Login_WithValidCredentials_ReturnsTrue , ma non sono sicuro di come potrei farlo senza effettivamente simulare ogni possibile risposta dall'API. Questo codice è effettivamente unità testabile o dovrebbe essere lasciato a un test di integrazione.

Se qualcuno potesse darmi un esempio di un semplice test unitario, sarei molto grato (sto usando Moq).

    
posta Sherlock 01.12.2013 - 12:31
fonte

1 risposta

2

I test unitari devono essere eseguiti velocemente e non hanno dipendenze esterne. I test di integrazione dovrebbero riguardare i metodi che chiamano i servizi web.

Non è possibile testare la logica di autenticazione dell'unità sul client, sarà necessario farlo sul server:

[WebMethod]
Authenticator{
 bool Login(Credentials credentials){
   return TestableClass.Login(credentials);
 }
}

ora puoi scrivere un test unitario sul server

Login_WithValidCredentials_ReturnsTrue(){
   // test TestableClass.login here
}

È inoltre possibile testare il codice lato client che utilizza il servizio. dì che hai un codice come questo: (scusami c #)

Class LoggerOnner{
  public LoggerOnner(IClient client, Response response){
    this.client = client
    this.page = page
  }

  Login() {
   if(this.client.Authenticate())
       response.sendPage("authenticated.aspx");
   else{
       response.sendError()
   }
  }
} 

Puoi verificare che usi correttamente il tuo cliente (come immagino moc lavori:)

IClient mocClient= moq.Create(IClient).Authenticate( x-> return true );
Request moxRequest = moq.Create(Request);

LoggerOnner lo = new LoggerOnner(mocClient, mocRequest);

Assert( mocRequst.sendPage().calledWithArgs("authenticated.aspx"));

TLDR; non testare la tua classe Client, renderla piccola e testare tutto il resto

    
risposta data 01.12.2013 - 13:03
fonte

Leggi altre domande sui tag