Ho lavorato su un'infrastruttura di test automatizzata MSTest, ovvero test di uno strumento che unisce i set di dati alle tabelle del database di SQL Server. La struttura di base del test è:
- Definisci il set di dati in arrivo usando i tipi anonimi
- Applica i dati utilizzando lo strumento di riconciliazione
- Leggi i record dalle tabelle di output
- Confronta le righe dei risultati per inserire i dati, colonna per colonna
Dati di input di esempio:
public class InputData : List<dynamic> {} // Inspired by Massive etc
InputData input = new InputData()
{
new { ExternalID = 1, PropertyName = "hello", Agent = "test" },
new { ExternalID = (Int64)2, PropertyName = "fred", Agent = "test" } // Fixes the problem with a cast
};
Il problema che ho a che fare è che il tipo inferito sui miei oggetti anonimi sarà un Int32, ma la colonna corrispondente nella mia tabella di destinazione è un bigint, e quindi il record avrà un valore Int64. Di conseguenza, quando utilizzo Assert.AreEqual su ogni colonna, fallisce su tutti i campi int:
Assert.AreEqual failed. Expected:<1 (System.Int32)>. Actual:<1 (System.Int64)>
Puoi vedere che ho lanciato l'int sul mio secondo oggetto anonimo, questo può essere usato per risolvere il problema. Lo scopo principale di questi test è di rendere i dati di esempio più snelli e facili da leggere / scrivere possibile, e preferirei evitare il rumore visivo di tutti quei tipi di calchi.
Sto pensando al modo migliore per gestire le asserzioni. Sembra che dovrei usare asserzioni dedicate basate sul tipo. Immagino che la vera domanda sia, quanto dovrei essere aggressivo nel convertire tra i tipi automaticamente?