Domanda

C'è un modo per avere una finta costruita al posto di un vero e proprio esempio quando testare il codice che chiama un costruttore?

Ad esempio:

public class ClassToTest
{
  public void MethodToTest()
  {
    MyObject foo = new MyObject();
    Console.WriteLine(foo.ToString());
  }
}

In questo esempio, ho bisogno di creare una prova di unità che conferma che chiamare MethodToTest su un'istanza di ClassToTest sarà infatti in uscita qualunque sia il risultato del metodo ToString () di una nuova istanza di MyObject.

Non riesco a vedere un modo di testare la classe realisticamente 'ClassToTest' in isolamento; testare questo metodo sarebbe effettivamente testare il 'myObject.ToString ()' metodo nonché il metodo MethodToTest.

È stato utile?

Soluzione

Non proprio. Il tuo ClassToTest è difficile prova a causa del suo design. Se si vuole essere in grado di scambiare le sue dipendenze per oggetti mock, allora avete bisogno di pensare a come queste dipendenze vengono iniettati - ma semplicemente crearli nel costruttore non è un approccio che sta per aiutarvi. È possibile utilizzare l'iniezione del costruttore:

public class ClassToTest
{
  MyObject _foo;
  public void MethodToTest(Myobject foo)
  {
    _foo = foo;
    Console.WriteLine(foo.ToString());
  }
}

o è possibile utilizzare l'iniezione di proprietà:

public class ClassToTest
{
  public MyObject Foo { get; set; }
  public void MethodToTest()
  {
  }
}

Il primo può soddisfare il vostro esempio più dato che si desidera scrivere il console là; spesso è l'approccio migliore quando la dipendenza è una dipendenza deve avere per l'oggetto piuttosto che un optional.

Si potrebbe fare molto peggio di esplorare i concetti di Dependency Injection e inversione di controllo .

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