2009-10-29 2 views
11

J'essaie de tester un fichier (Account.cs) en utilisant testfile (AccountTest.cs). Je cours OSX 10.6 avec Mono Framework (et nunit-console).Couverture de code utilisant des tests mono et nunit

Ci-dessous est 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;} 
     } 
    } 
} 

Et voici 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); 
       } 
     } 

} 

Je compile ces deux fichiers par:

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

Et obtenir compte .dll et AccountTest.dll respectivement.

Pour exécuter le test que j'utilise:

nunit-console AccountTest.dll 

et il fonctionne comme il se doit, me donner les échecs appropriés et passe.

Cependant, maintenant je veux utiliser la capacité de couverture de code mono pour évaluer ces tests. Je lis le tutoriel http://mono-project.com/Code_Coverage pour exécuter les outils de couverture. Et pour l'utiliser, je devrais compiler dans le fichier * .exe plutôt que le fichier * .dll.

Si quelqu'un pouvait m'aider avec la classe principale du fichier AccountTest.cs, je serais capable de le compiler ensuite en exe et d'utiliser l'outil de couverture.

Merci une tonne à l'avance.

Répondre

6

Vous pointant vers la page droite:

"Pour utiliser des options similaires lors de l'exécution des tests unitaires directement avec nunit-console2, spécifiez MONO_OPTIONS comme suit: MONO_OPTIONS =" - profile = monocov: + [MyAssembly] » nunit-console2 MyTestAssembly.dll "

Vous pouvez exécuter vos tests unitaires et obtenir une couverture de code en définissant l'option.

1

Vous pouvez essayer Baboon mon nouvel outil de couverture de code mono. Les profileurs monocov et cov vérifient seulement l'entrée/la sortie de la méthode tandis que Baboon est capable de vérifier la couverture de chaque ligne de chaque méthode dans votre programme, y compris les initialiseurs statiques et les membres privés. Ce qui précède crée un fichier de configuration qui indique à baboon de regarder le code dans votre assembly. Ensuite, définissez et variable d'environnement et exécutez-le: -

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

Donnez-lui un tour! Fonctionne mieux sur mono 3.x, vous aurez besoin de gtk-sharp installé pour exécuter l'interface graphique ou vous pouvez générer un rapport html de base. Je l'ai écrit sur Linux, mais il devrait fonctionner aussi bien sur OSX.

Les demandes de fonctionnalités/rapports de bogues sont les bienvenus!

Questions connexes