Sto provando a scrivere un test dell'unità C# con il framework di test unità integrato di VS 2008 e il metodo che sto testando chiama Environment.Exit(0)
. Quando chiamo questo metodo nel mio test unitario, il mio test unitario viene interrotto. Il metodo dovrebbe infatti chiamare Exit
, e voglio un modo per testarlo, e anche per testare il codice di uscita che usa. Come potrei farlo? Ho guardato allo Microsoft.VisualStudio.TestTools.UnitTesting Namespace ma non ho visto nulla di rilevante.Test unità VS2008 - metodo assertivo uscite
[TestMethod]
[DeploymentItem("myprog.exe")]
public void MyProgTest()
{
// Want to ensure this Exit's with code 0:
MyProg_Accessor.myMethod();
}
Nel frattempo, qui è l'essenza del codice che voglio prova:
static void myMethod()
{
Environment.Exit(0);
}
Edit: ecco la soluzione che ho usato nel mio metodo di prova, grazie a RichardOD:
Process proc;
try
{
proc = Process.Start(path, myArgs);
}
catch (System.ComponentModel.Win32Exception ex)
{
proc = null;
Assert.Fail(ex.Message);
}
Assert.IsNotNull(proc);
proc.WaitForExit(10000);
Assert.IsTrue(proc.HasExited);
Assert.AreEqual(code, proc.ExitCode);
+1 sul TypeMock Isolator qui - è l'unica soluzione io sappia, che consente di intercettare e modelli assolutamente nulla. –
Il pericolo di essere in grado di prendere in giro metodi statici è che non ti svezzi di usarli con la stessa facilità. In realtà trovo che (per il mio codice) sia costretto a lavorare molto duramente per avere metodi statici è una buona cosa dato che non li userò a meno che non siano la soluzione migliore. Questo aiuta a forzare lo sviluppo usando tecniche migliori, IMO. Il rovescio della medaglia è che sei costretto a saltare attraverso i cerchi quando interagisci con quei metodi statici quando hanno senso (o il framework non è costruito pensando ai test). – tvanfosson
@ tvanfosson- Questo è un buon punto. Ecco perché molte persone (me compreso) cercano di evitare l'uso eccessivo di metodi statici durante la scrittura di codice verificabile. Le classi di framework .NET statiche sono un test del dolore e gli sviluppatori spesso devono ricorrere al codice wrapper per renderlo testabile (come da tua risposta). È possibile vedere molto dall'evoluzione dei moduli Web ASP.NET a ASP.NET MVC. – RichardOD