C# 在开发人员命令提示符下运行单元测试
我在VS 2017中创建了一个项目,其中一个类是从 它在VS中工作得很好,但当我尝试在控制台中运行相同的程序时,它会返回 没有要执行的测试C# 在开发人员命令提示符下运行单元测试,c#,unit-testing,command-line,mstest,C#,Unit Testing,Command Line,Mstest,我在VS 2017中创建了一个项目,其中一个类是从 它在VS中工作得很好,但当我尝试在控制台中运行相同的程序时,它会返回 没有要执行的测试 我检查了以前文章中的共享解决方案,但不幸的是,运行测试没有帮助。有人能帮我解决这个问题吗?我不知道内置测试资源管理器的例外情况,但我确实将此框架与另一个测试运行程序一起使用,它被称为smartrunner。 为什么不试试Typemock,它有一个可以从命令行触发测试的功能,并且它完全支持像您这样的异常/错误。它是免费试用的,所以如果我的建议不起作用,也不
我检查了以前文章中的共享解决方案,但不幸的是,运行测试没有帮助。有人能帮我解决这个问题吗?我不知道内置测试资源管理器的例外情况,但我确实将此框架与另一个测试运行程序一起使用,它被称为smartrunner。 为什么不试试Typemock,它有一个可以从命令行触发测试的功能,并且它完全支持像您这样的异常/错误。它是免费试用的,所以如果我的建议不起作用,也不会造成任何伤害。
由于与MSTest frameworkefork集成,它将100%适用于您,因此您无需更改代码中的任何内容 我不知道内置测试资源管理器的异常情况,但我确实将此框架与另一个测试运行程序一起使用,它称为smartrunner。 为什么不试试Typemock,它有一个可以从命令行触发测试的功能,并且它完全支持像您这样的异常/错误。它是免费试用的,所以如果我的建议不起作用,也不会造成任何伤害。
由于与MSTest frameworkefork集成,它将100%适用于您,因此您无需更改代码中的任何内容 在我看来,问题在于版本控制。在VS2015的DCP中运行测试。我不确定如何为VS2017修复它,但至少它是有效的。在我看来,问题在于版本控制。在VS2015的DCP中运行测试。我不知道如何为VS2017修复它,但至少它可以工作。
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.");
}
}