Sto appena iniziando con il linguaggio di programmazione D2. Adoro il fatto che il testing delle unità sia parte del linguaggio stesso, ma non riesco a trovare alcuna libreria di oggetti di simulazione per questo. C'è uno standard là fuori?Quali librerie di oggetti di simulazione sono disponibili per D?
risposta
L'unica libreria di oggetti di simulazione che conosco è DMocks, ma è stata abbandonata. Potrebbe non essere compilato con le versioni recenti del compilatore. Forse BlackHole, buco bianco e AutoImplement da std.typecons vi aiuterà in una certa misura.
Anche se non è sofisticato come una vera e propria libreria di oggetti finta potrebbe essere, io attualmente faccio l'iniezione di dipendenza con buoni risultati nel seguente modo:
class Car(Engine = AtomicEngine, Wheel = CartWheel)
{
this()
{
engine = new Engine;
...
}
Engine engine;
Wheel[4] wheels;
}
Se non MockEngine viene fornito di default auto a usare l'AtomicEngine preferito che è pulito perché è quello che voglio la maggior parte del tempo. Si noti inoltre che l'iniezione viene eseguita in fase di compilazione senza alcuna penalità in fase di esecuzione per le capacità di derisione, ovvero non è richiesta alcuna eredità.
unittest
{
auto car = new Car!(MockBrokenEngine, MockWheel);
car.start();
assert(...);
}
Testiamo la macchina con un motore rotto come questo.
- DMocks-revived è un quadro oggetto fittizio per il linguaggio di programmazione D, scritto anche in D.
- dunit (nomad) avanzata unit testing toolkit.
Sono l'autore di DUnit che contiene una soluzione di beffa. E 'usato in questo modo:
class Foo
{
// Mixin mocking behaviour.
mixin Mockable!(Foo);
}
auto foo = Foo.getMock();
foo
è ora un mock.
Il riferimento è qui: http://htmlpreview.github.io/?https://github.com/nomad-software/dunit/master/docs/dunit/mockable.html
Un esempio più grande è qui: https://github.com/nomad-software/dunit/blob/master/source/example.d
Questo è tutto bene, ma come si fa a creare le deride? Questo è ciò che l'OP sta chiedendo. –