Запустите модульные тесты в командной строке разработчика - PullRequest
0 голосов
/ 12 июня 2018

Я создал проект в VS 2017 с одним классом, скопированным из здесь .

namespace BankAccountNS
{
    /// <summary>   
    /// Bank Account demo class.   
    /// </summary>   
    public class BankAccount
    {
        public const string DebitAmountExceedsBalanceMessage = "Debit amount exceeds balance";
        public const string DebitAmountLessThanZeroMessage = "Debit amount less than zero";
        private string m_customerName;
        private double m_balance;
        private bool m_frozen = false;

        private BankAccount()
        { }

        public BankAccount(string customerName, double balance)
        {
            m_customerName = customerName;
            m_balance = balance;
        }

        public string CustomerName
        {
            get { return m_customerName; }
        }

        public double Balance
        {
            get { return m_balance; }
        }

        public void Debit(double amount)
        {
            if (m_frozen)
            {
                throw new Exception("Account frozen");
            }

            if (amount > m_balance)
            {
                throw new ArgumentOutOfRangeException("amount", amount, DebitAmountExceedsBalanceMessage);
            }

            if (amount < 0)
            {
                throw new ArgumentOutOfRangeException("amount", amount, DebitAmountLessThanZeroMessage);
            }

            m_balance -= amount;
        }

        public void Credit(double amount)
        {
            if (m_frozen)
            {
                throw new Exception("Account frozen");
            }

            if (amount < 0)
            {
                throw new ArgumentOutOfRangeException("amount");
            }

            m_balance += amount;
        }

        private void FreezeAccount()
        {
            m_frozen = true;
        }

        private void UnfreezeAccount()
        {
            m_frozen = false;
        }

        public static void Main()
        {
            BankAccount ba = new BankAccount("Mr. Bryan Walton", 11.99);

            ba.Credit(5.77);
            ba.Debit(11.22);
            Console.WriteLine("Current balance is ${0}", ba.Balance);
        }
    }
}

Также я создал проект для модульных тестов с одним классом и двумяметоды испытаний

using Microsoft.VisualStudio.TestTools.UnitTesting;
using BankAccountNS;
using System;

namespace BankTests
{
[TestClass()]
public class BankAccountTests
{        
    [TestMethod()]
    public void Debit_WithValidAmount_UpdatesBalance()
    {
        // arrange  
        double beginningBalance = 11.99;
        double debitAmount = 4.55;
        double expected = 7.44;
        BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance);

        // act  
        account.Debit(debitAmount);

        // assert  
        double actual = account.Balance;
        Assert.AreEqual(expected, actual, 0.001, "Account not debited correctly");
    }

    [TestMethod()]
    public void Debit_WhenAmountIsMoreThanBalance_ShouldThrowArgumentOutOfRange()
    {
        // arrange  
        double beginningBalance = 11.99;
        double debitAmount = 20.0;
        BankAccount account = new BankAccount("Mr. Bryan Walton", beginningBalance);

        // act  
        try
        {
            account.Debit(debitAmount);
        }
        catch (ArgumentOutOfRangeException e)
        {
            // assert  
            StringAssert.Contains(e.Message, BankAccount.DebitAmountExceedsBalanceMessage);
            return;
        }
        Assert.Fail("No exception was thrown.");
    }
}

Он хорошо работает в VS, но когда я пытаюсь запустить его в консоли, он возвращает

Нет тестов для выполнения.

enter image description here

Я проверил общие решения из предыдущих постов, но, к сожалению, это не помогает запускать тесты.Кто-нибудь может мне помочь с этим вопросом, пожалуйста?

1 Ответ

0 голосов
/ 14 июня 2018

Я не знаю об исключениях встроенного тестового проводника, но я использую эту среду с другим тестовым прогоном, он называется smartrunner.Почему бы вам не попробовать Typemock's Isolator , он имеет TmockRunner , который может запускать тесты из командной строки, и имеет полную поддержку для исключений / ошибок, подобных вашей.Он имеет бесплатную пробную версию, поэтому в случае, если мое предложение не работает, никакого вреда не было.Он будет работать для вас на 100% благодаря интеграции с MSTest frameworkefork, поэтому вам не нужно ничего менять в своем коде.

...