2009-10-29 17 views
11

Próbuję przetestować plik (Account.cs) przy użyciu pliku testfile (AccountTest.cs). Używam OSX 10.6 z Mono Framework (i konsolą nunit).Pokrycie kodu przy użyciu testów mono i nunitowych

Poniżej 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;} 
     } 
    } 
} 

A oto 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); 
       } 
     } 

} 

skompilować te dwa pliki o:

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

i uzyskać konto .dll i AccountTest.dll odpowiednio.

Aby uruchomić test używać:

nunit-console AccountTest.dll 

i działa tak jak powinien, dając mi odpowiednie awarie i przechodzi.

Jednak teraz chcę użyć możliwości pokrycia kodu mono do oceny tych testów. Czytam samouczek http://mono-project.com/Code_Coverage, aby uruchomić narzędzia do pokrycia. Aby go użyć, musiałbym skompilować plik * .exe zamiast pliku * .dll.

Jeśli ktoś mógłby mi pomóc z główną klasą pliku AccountTest.cs, byłbym w stanie skompilować go w exe, a stamtąd użyć narzędzia pokrycia.

Dziękuję z góry za tonę.

Odpowiedz

6

Jesteś wskazując na prawej stronie:

"Aby wykorzystać podobne opcje podczas uruchamiania testów jednostkowych bezpośrednio z nunit-console2 określ MONO_OPTIONS następująco: MONO_OPTIONS =" - profile = monocov: + [MyAssembly]” nunit-console2 MyTestAssembly.dll "

Możesz uruchomić testy jednostek i uzyskać zasięg kodu, ustawiając opcję.

1

Być może spodoba ci się wypróbowanie nowego mojego narzędzia do pokrycia monokodem w postaci Baboon. Profilery monocov i cov sprawdzają tylko metody wejścia/wyjścia metody, podczas gdy Baboon jest w stanie sprawdzić pokrycie każdej linii każdej metody w twoim programie, w tym inicjatory statyczne i elementy prywatne.

$ echo assembly:MyTestFixture > ~/test.cfg 

Powyższy tworzy plik konfiguracyjny, który mówi pawiana spojrzeć na kod w swoim zespole. Następnie ustaw zmienną środowiskową i uruchom ją: -

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

Zakręć! Działa najlepiej na mono 3.x, do uruchomienia GUI potrzebujesz programu gtk-sharp lub możesz wygenerować podstawowy raport HTML.

Pisałem to na Linuksie, ale powinno działać równie dobrze na OSX.

Najbardziej pożądane są zgłoszenia zapotrzebowania/zgłoszenia błędów!

Powiązane problemy