Кодовый охват с использованием тестов mono и nunit

Я пытаюсь проверить файл (Account.cs) с помощью testfile (AccountTest.cs). Я запускаю OSX 10.6 с Mono Framework (и nunit-console).

Ниже приведена 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;}
        }
    }
}

И вот 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);
                }
        }

}

Я скомпилирую эти два файла:

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

И получите Account.dll и AccountTest.dll соответственно.

Для запуска теста я использую:

nunit-console AccountTest.dll 

и он работает как следует, давая мне соответствующие отказы и пропуски.

Однако теперь я хочу использовать возможности покрытия монофонического кода для проверки этих тестов. Я читаю учебник http://mono-project.com/Code_Coverage для запуска инструментов покрытия. И для его использования мне нужно будет скомпилировать файл *.exe, а не файл *.dll.

Если кто-то может помочь мне с основным классом файла AccountTest.cs, я смогу затем скомпилировать его в exe и оттуда использовать инструмент покрытия.

Спасибо за тонну заранее.

Ответ 1

Вы указываете на правильную страницу:

"Чтобы использовать аналогичные параметры при запуске модульных тестов непосредственно с помощью nunit-console2, укажите MONO_OPTIONS следующим образом: MONO_OPTIONS =" - profile = monocov: + [MyAssembly] "nunit-console2 MyTestAssembly.dll"

Вы можете запускать свои модульные тесты и получать покрытие кода, установив этот параметр.

Ответ 2

Вам может понравиться опробовать Baboon мой новый инструмент для покрытия монофонического кода. Профилировщики monocov и cov проверяют только вход/выход метода, в то время как Baboon может проверять охват каждой строки каждого метода в вашей программе, включая статические инициализаторы и частные члены.

$ echo assembly:MyTestFixture > ~/test.cfg

Вышеупомянутый файл создает файл конфигурации, который говорит бабуину посмотреть код в вашей сборке. Затем установите и измените переменную окружения и запустите ее: -

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

Дайте ему вращаться! Лучше всего работает на mono 3.x, вам понадобится gtk-sharp для запуска графического интерфейса или вы можете создать базовый html-отчет.

Я писал его в Linux, но он должен работать одинаково хорошо в OSX.

Приветствуются запросы функций/сообщений об ошибках!