Quando Microsoft ha rilasciato Visual Studio 2008, c'era una cosa di cui stavano parlando molto durante le conferenze e nelle loro esercitazioni online: l'idea di scrivere il codice reale in una lingua e l'unità test in una lingua diversa. Ad esempio, i test unitari per il codice C # possono essere scritti in Visual Basic.
Sei anni dopo, non conosco nessun progetto open source che usi questa pratica e nessun progetto proprietario che ho visto utilizzi. L'argomento non è più discusso nelle conferenze, nei blog o nelle esercitazioni di Microsoft.
Il vantaggio di questa pratica è che fare lo stesso tipo di errore in due lingue diverse è più difficile. Ad esempio, se non lo so in C #, 10/3
equivale a 3
e aspettiamo che sia 3.333...
, un test unitario scritto in Python o JavaScript fallirà e mi porterà alla scoperta nella divisione integer.
.NET Framework, in particolare, rende possibile l'utilizzo di qualsiasi linguaggio abilitato a .NET per testarne un altro. Mentre testare il codice C # con i test di Visual Basic non sembra particolarmente interessante, data la somiglianza di entrambi i linguaggi, immagino che, ad esempio, testare il codice F # con test unitari scritti in C # possa essere utile per le persone che non hanno familiarità con programmazione funzionale.
Personalmente, non ho esperienza di scrittura dei test unitari in una lingua diversa. Pertanto, non so se ci sono dei veri inconvenienti in questa tecnica. Scrivo spesso test di sistema e di accettazione in una lingua diversa (ad esempio in Python per un'app Web Node.js, perché le richieste di Python la libreria è così grande), ma questo non conta, dal momento che quei test sono veramente indipendenti dal linguaggio: eseguono solo test black box tramite HTTP: posso riscrivere un'app da Node.js a ASP.NET MVC, e i test non noteranno nemmeno il cambiamento.
Quindi quali potrebbero essere gli svantaggi e perché questa pratica non è così popolare?