2009-10-29 14 views
11

Ich versuche, eine Datei (Account.cs) mit testfile (AccountTest.cs) zu testen. Ich betreibe OSX 10.6 mit Mono Framework (und Nunit-Konsole).Code Coverage mit Mono- und Nunit-Tests

Unten ist Account.cs

namespace bank 
{ 
    using System; 
    public class InsufficientFundsException : ApplicationException 
    { 
    } 
    public class Account 
    { 
     private float balance; 
     public void Deposit(float amount) 
     { 
      balance+=amount; 
     } 

     public void Withdraw(float amount) 
     { 
      balance-=amount; 
     } 

     public void TransferFunds(Account destination, float amount) 
     { 
      destination.Deposit(amount); 
      Withdraw(amount); 
     } 

     public float Balance 
     { 
      get { return balance;} 
     } 
     private float minimumBalance = 10.00F; 
     public float MinimumBalance 
     { 
      get{ return minimumBalance;} 
     } 
    } 
} 

Und hier ist AccountTest.cs:

namespace bank 
{ 
    using NUnit.Framework; 

    [TestFixture] 
     public class AccountTest 
     { 
      [Test] 
       public void TransferFunds() 
       { 
        Account source = new Account(); 
        source.Deposit(200.00F); 
        Account destination = new Account(); 
        destination.Deposit(150.00F); 

        source.TransferFunds(destination, 100.00F); 
        Assert.AreEqual(250.00F, destination.Balance); 
        Assert.AreEqual(100.00F, source.Balance); 
       } 
      [Test] 
       [ExpectedException(typeof(InsufficientFundsException))] 
       public void TransferWithInsufficientFunds() 
       { 
        Account source = new Account(); 
        source.Deposit(200.00F); 
        Account destination = new Account(); 
        destination.Deposit(150.00F); 
        source.TransferFunds(destination, 300.00F); 
       } 
     } 

} 

ich diese beiden Dateien kompilieren:

mcs -t:library Account.cs 
mcs -t:library -r:nunit.framework,Account.dll AccountTest.cs 

und erhalten Konto .dll und AccountTest.dll jeweils.

den Test verwende ich auszuführen:

nunit-console AccountTest.dll 

und es läuft, wie es sollte, mir die entsprechenden Ausfälle geben und Pässe.

Aber jetzt möchte ich mono's Code-Coverage-Fähigkeit verwenden, um diese Tests zu beurteilen. Ich lese das Tutorial http://mono-project.com/Code_Coverage, um die Coverage-Tools auszuführen. Und um es zu verwenden, müsste ich eine * .exe-Datei anstelle einer * .dll-Datei kompilieren.

Wenn jemand mir mit der Hauptklasse der Datei AccountTest.cs helfen könnte, wäre ich in der Lage, es in exe zu kompilieren und von dort das Coverage-Tool zu verwenden.

Vielen Dank im Voraus.

Antwort

6

Sie sind auf der rechten Seite zeigen:

"ähnliche Optionen zu verwenden, während das Gerät laufen Tests direkt mit nunit-konsole2 geben MONO_OPTIONS wie folgt: MONO_OPTIONS =" - Profil = monocov: + [MyAssembly]“ Nunit-console2 MyTestAssembly.dll "

Sie können Ihre Komponententests ausführen und Codeabdeckung erhalten, indem Sie die Option festlegen.

1

Sie könnten gerne ausprobieren, Baboon mein neues Mono-Code-Coverage-Tool. Die Monocov- und Cov-Profiler überprüfen nur den Methoden-Eintritt/-Ausgang, während Pavian in der Lage ist, die Abdeckung jeder Zeile jeder Methode in Ihrem Programm zu überprüfen, einschließlich statischer Initialisierer und privater Mitglieder.

$ echo assembly:MyTestFixture > ~/test.cfg 

Die oben erstellt eine Konfigurationsdatei, die Pavian auf Code in der Assembly suchen erzählt. Dann setze und Umgebungsvariable und führe es aus: -

$ BABOON_CFG=$HOME/test.cfg covem.exe /opt/nunit/nunit-console.exe MyTestFixture.dll 

Probieren Sie es aus! Funktioniert am besten mit mono 3.x, Sie benötigen gtk-sharp, um die GUI zu starten oder Sie können einen einfachen HTML-Bericht erstellen.

Ich habe es unter Linux geschrieben, aber es sollte genauso gut auf OSX laufen.

Feature-Anfragen/Fehlerberichte herzlich willkommen!