Покрытие кода с использованием моно и моноблочных тестов - PullRequest
11 голосов
/ 30 октября 2009

Я пытаюсь проверить файл (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 и оттуда использовать инструмент покрытия.

Заранее благодарим за тонну.

Ответы [ 2 ]

6 голосов
/ 01 декабря 2009

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

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

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

1 голос
/ 17 июня 2013

Вы можете попробовать Бабуин мой новый инструмент покрытия монокодов. Профилировщики 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.

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

...