Domanda

Ciao Si supponga Ho un interfaccia A e di classe B che implementa A. Nella mia classe di test ho creare una classe fittizio che implementa A e I "metodi di prova interfaccia" Ora la mia domanda è devo sottoporre a test i metodi che la classe B "ottiene" dal l'interfaccia.

È stato utile?

Soluzione

Nella mia esperienza, basta classi concrete di prova e la loro interazione con le interfacce.

Cioè, se si dispone di calcestruzzo di classe B che implementa un, appena prova B e la sua interazione con altri oggetti cui fa riferimento.

Altri suggerimenti

In generale test dovrebbe toccare tutti (eseguibili) righe di codice. Se si implementa l'interfaccia lo rende molto più facile, dato che è possibile test di codice che costituiscono il "contratto" dell'interfaccia e ora i test applicano a tutti gli implementatori dell'interfaccia.

Ciò garantisce la coerenza tra tutti implementatori. Se si verifica una situazione in cui gli implementatori comportano in modo diverso (ad esempio NullReferenceException vs. ArgumentNullException) è possibile aggiungere i test specificando che è "giusto" e che è sbagliato. Questo porta a meno sorprese lungo la strada.

potrei anche andare fino a dire che ogni interfaccia dovrebbe avere una serie di test collegati per descrivere il comportamento previsto.

Ci sono delle cose specifiche di implementazione, naturalmente, che possono essere testati solo su implementor concreto (ad esempio "è stato il file scritto?" Vs "è stato il disco ha commesso?"). Queste cose dovrebbero essere forniti attraverso priorità assoluta o lambda alla suite di test dell'interfaccia.

Sì, si dovrebbe mirare a ottenere una copertura di codice 100% con il test

Dal momento che l'interfaccia non dovrebbe avere alcuna attuazione concreta, allora non c'è bisogno di provarlo poiché non v'è nulla da testare per definizione. Il test dovrebbe essere per la concreta attuazione dell'interfaccia.

Se vi trovate in una situazione in cui è necessario disporre di un implementaton parziale di un'interfaccia che si può fare quello che faccio. Per esempio, dire che ho un'interfaccia di un elemento. Questa chiamata IItem e mi ha tutta l'interfaccia. Poi Dichiaro un Item che è l'implementazione parziale dell'interfaccia di codice comune e poi ItemA, ItemB, ecc per le specializzazioni della Item.

Ho letto tutti i vostri messaggi mi Credo che questa soluzione funziona meglio.

Interface A
{
   String A1();
   String A2();
}

public class B:A
{
   String A1(){return "A1"}
   String A2(){return "A2"}
}

public class testB
{
   public void B_Can_Return_A1()
   {
      A b=new B();
      Assert.True(b.A1=="A1")
   }
}
  

Ma se si sta rimuovendo un metodo da un'interfaccia che le implementazioni concrete si basano ancora su di certo non si dovrebbe rimuovere quella parte dell'interfaccia?

Questo è vero, ma questo dovrebbe ancora essere eseguita in test cioè testati. interfacce (dovrebbero) svolgere un ruolo importante nello sviluppo e cambiamenti possono creare enormi problemi su tutta la linea. Se un oggetto implementa un'interfaccia Penso che questo è come dovrebbe essere testato o qualcosa di simile.

Si prega di commentare su questo.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top