Attualmente sto sviluppando un wrapper C# P/invoke su una DLL che fa parte del mio prodotto. Non ho esperienza con C# e questa è la prima codifica C# significativa che ho fatto. Sono profondamente consapevole del fatto che mi manca molta conoscenza dei punti e degli idiomi più fini della lingua.Come posso estendere la classe NUnit Assert aggiungendo un nuovo sovraccarico statico per AreEqual?
La mia domanda riguarda le unit test che sto scrivendo per cui sto usando NUnit. Ho bisogno di confrontare i valori delle variabili double[]
. Se utilizzo Assert.AreEqual(...)
per fare ciò, i valori vengono confrontati per l'uguaglianza esatta. Tuttavia, vorrei confrontarmi con una tolleranza. Esistono sovraccarichi AreEqual()
per valori reali scalari che ammettono un parametro delta
. Tuttavia, non sono stato in grado di trovare un equivalente per gli array. Ho perso qualcosa di ovvio?
Al momento ho risolto il problema con il seguente codice:
class Assert : NUnit.Framework.Assert
{
public static void AreEqual(double[] expected, double[] actual, double delta)
{
AreEqual(expected.Length, actual.Length);
for (int i = 0; i < expected.Length; i++)
{
AreEqual(expected[i], actual[i], delta);
}
}
}
Anche se questo sembra funzionare Mi chiedo se ci sia una soluzione più pulita a disposizione. In particolare, sono preoccupato che l'uso dello stesso nome per la mia classe derivata sia non solo di scarsa qualità, ma potrebbe portare a problemi non previsti lungo la strada.
Vorrei utilizzare i metodi di estensione, ma capisco che sono utilizzabili solo quando c'è un'istanza della classe in estensione. Naturalmente, ho sempre chiamato solo metodi statici sulla classe Assert
.
Mi dispiace se questo sembra un po 'nebuloso, ma il mio istinto mi dice che non sto facendo questo nel modo migliore e mi piacerebbe sapere come farlo nel modo giusto.
Hai provato [Metodi di estensione] (http://msdn.microsoft.com/en-us/library/bb383977.aspx)? –
@Ofer Zelig mentre ti ho dato il +1 mi sono ricordato che i Metodi di Estensione, mentre definiti statici, funzionano solo sulle istanze. – dowhilefor
Così come sembra ora, non si può fare (a meno che non si stia implementando la classe wrapper, un sacco di lavoro duro e brutto). Vedi [this] (http://stackoverflow.com/questions/249222/can-i-add-extension-methods-to-an-existing-static-class/435617#435617) e [this] (http: // madprops.org/blog/static-extension-methods/). –