Ho iniziato a scrivere alcuni test unitari per il mio progetto attuale. Non ho davvero esperienza con questo però. Prima voglio completamente "capirlo", quindi attualmente non utilizzo né il mio framework IoC né una libreria di derisione.
Mi chiedevo se c'è qualcosa di sbagliato nel fornire argomenti nulli ai costruttori di oggetti nei test unitari. Consentitemi di fornire un codice di esempio:
public class CarRadio
{...}
public class Motor
{
public void SetSpeed(float speed){...}
}
public class Car
{
public Car(CarRadio carRadio, Motor motor){...}
}
public class SpeedLimit
{
public bool IsViolatedBy(Car car){...}
}
Ancora un altro esempio di codice auto (TM), ridotto a solo le parti importanti per la domanda. Ora ho scritto un test qualcosa del genere:
public class SpeedLimitTest
{
public void TestSpeedLimit()
{
Motor motor = new Motor();
motor.SetSpeed(10f);
Car car = new Car(null, motor);
SpeedLimit speedLimit = new SpeedLimit();
Assert.IsTrue(speedLimit.IsViolatedBy(car));
}
}
Il test funziona bene. SpeedLimit
ha bisogno di un Car
con un Motor
per fare la sua cosa. Non è interessato a CarRadio
, quindi ho fornito null per questo.
Mi chiedo se un oggetto che fornisce la funzionalità corretta senza essere completamente costruito sia una violazione di SRP o un odore di codice. Ho la sensazione fastidiosa che sia così, ma speedLimit.IsViolatedBy(motor)
non sembra giusto - un limite di velocità è violato da un'auto, non da un motore. Forse ho solo bisogno di una prospettiva diversa per i test unitari e il codice funzionante, perché l'intera intenzione è di testare solo una parte del tutto.
La costruzione di oggetti con null nei test di unità è un codice olfattivo?