Bene, penso che i commenti di tutti fino ad ora siano tecnicamente corretti - usando qualcosa come RhinoMocks
o Moq
, non si può davvero prendere in giro metodi statici in modo facile e diretto.
Ma usando Moles
, è sicuramente possibile. Quindi, se hai codice significativo (attualmente) non testabile che risiede in metodi statici, penso che dovresti esaminare Moles.
(Questo link è un po 'datato, ma trovo ancora utile) http://research.microsoft.com/en-us/projects/pex/molesmanual.pdf
(testo Chiave)
Moles può essere utilizzato per deviare qualsiasi metodo .NET, tra cui non virtuale e metodi statici in tipi sigillati.
Come funziona: Supponiamo di avere una situazione tipica del genere:
public static class SomeStaticClass
{
public static int SomeStaticMethod(string s)
{
return "Static method called: " + s;
}
}
public class SomeInstanceClass
{
public string SomeInstanceMethod(string s)
{
return SomeStaticClass.SomeStaticMethod(s);
}
}
Utilizzando Moles, il codice di prova sarebbe simile a questa:
[TestMethod()]
[HostType("Moles")]
public void ShouldBeAbleToTestStaticMethod()
{
var instance = new SomeInstanceClass();
var testValue = instance.SomeInstanceMethod("Some test string");
SomeStaticClass.SomeStaticMethod = (s) => "Moled you! " + s;
Assert.That(testValue, Is.EqualTo("Moled you! Some test string"); // sorry, this has code smell, lol
}
Naturalmente è necessario impostare up Moles nel tuo progetto di test, quindi assicurati di cercarlo - molte risorse web per aiutarti a raggiungere la tua strada.
Alcuni post utile:
https://msdn.microsoft.com/en-us/library/ff798308.aspx
http://adventuresdotnet.blogspot.com/2011/03/mocking-static-methods-for-unit-testing.html
https://wannabeegeek.wordpress.com/2013/03/13/unit-testing-made-easy-with-moles-part-i/
Invece di hardcoding 'AppData.GetAppData' si potrebbe iniettare una classe che fa la lettura del AppData e poi nella vostra unit test, prendi in giro quella lezione e imposta il valore di ritorno che ti serve. – LInsoDeTeh
Con Moq non possibile senza ulteriori modifiche del codice sorgente. Ma con [Typemock's Isolator] (http://www.typemock.com/isolator-features/test-the-un-estestable/fake-static-methods.html) è possibile. Tuttavia Isolator non è gratuito. – dee
E [qui] (http://adventuresdotnet.blogspot.de/2011/03/mocking-static-methods-for-unit-testing.html) qualche altra informazione sui metodi statici di simulazione. E [qui] (http://stackoverflow.com/questions/5864076/mocking-static-methods) risposta da SO. HTH – dee