C# 使用NUnit测试自定义异常
使用NUnit测试自定义异常时遇到问题。作为背景,我正在构建一个简单的机场计划来改进C#,这是我最近开始学习的。如果有暴风雨或机场满员,飞机就不能在机场降落。有关守则摘录: 摘录自机场等级,但有例外:C# 使用NUnit测试自定义异常,c#,exception,nunit,C#,Exception,Nunit,使用NUnit测试自定义异常时遇到问题。作为背景,我正在构建一个简单的机场计划来改进C#,这是我最近开始学习的。如果有暴风雨或机场满员,飞机就不能在机场降落。有关守则摘录: 摘录自机场等级,但有例外: public void Land(Plane plane) { try { if (weather.Forecast() == "stormy") {
public void Land(Plane plane)
{
try
{
if (weather.Forecast() == "stormy")
{
throw new StormyException("It's too stormy to land");
}
if (planes.Count >= _Capacity)
{
throw new CapacityException("Airport is full");
}
planes.Add(plane);
Console.WriteLine($"{ plane.Name } has landed at {_AirportName}");
}
catch (Exception ex)
{
Console.WriteLine(ex.Message);
}
}
例外情况本身的示例:
class StormyException : Exception
{
public StormyException(string message)
: base(String.Format(message))
{
}
}
失败测试的示例:
[Test]
public void PlaneWontLandIfStormy()
{
var weather = new Mock<Weather>();
weather.Setup(x => x.Forecast()).Returns("stormy");
var airport = new Airport("TestAirport", weather.Object, 10);
var exception = Assert.Throws<Exception>(() => airport.Land(plane));
Assert.AreEqual(exception.Message, "It's too stormy to land");
}
[测试]
公共空间飞机云图风暴()
{
var weather=新模拟();
weather.Setup(x=>x.Forecast()).Returns(“暴风雪”);
var机场=新机场(“测试机场”,weather.Object,10);
var exception=Assert.Throws(()=>airport.Land(plane));
AreEqual(exception.Message,“暴风雨太大,无法降落”);
}
当我运行程序时,一切正常。但是,此测试未通过,并出现以下错误:
预期值:但为:null
。我已经对此进行了研究,并看到了[ExpectedException]
的语法。。。但我似乎无法解决这个问题。我对C#很陌生,所以非常感谢您的帮助,谢谢 您的Land
方法需要抛出异常,而不是捕获它
public void Land(Plane plane)
{
if (weather.Forecast() == "stormy")
{
throw new StormyException("It's too stormy to land");
}
if (planes.Count >= _Capacity)
{
throw new CapacityException("Airport is full");
}
planes.Add(plane);
Console.WriteLine($"{ plane.Name } has landed at {_AirportName}");
}
在您的测试中 var exception=Assert.Throws(()=>airport.Land(plane)); AreEqual(exception.Message,“暴风雨太大,无法降落”) 或 var exception=Assert.Throws(()=>airport.Land(plane));
例外.Message.Equals(“暴风雨太大,无法降落”) 异常处理是我最讨厌的一件事,你在处理异常时遇到了一些严重的问题。我希望这只是为了测试,但为了安全起见,我会将我最喜欢的两篇文章链接起来,解释如何正确操作:|您正在使用异常,因此除了该方法之外没有什么可捕捉的。谢谢@Christopher-我将阅读这些文章。哦,不:(我认为我在处理异常方面做得很好-你能详细说明什么是严重的问题吗?(不需要详细说明-我会阅读文章-只是想知道什么会立即跳到你身上如此糟糕?)@jordantomiko我经常链接这些文章,因为这些都是初学者常见的错误。我看到的最大错误是“catch(Exception ex)”-你将catch设置为wide。接下来是
Console.WriteLine(ex.Message)
-您只公开了消息。@Christopher感谢您花时间解释这一点并分享文章-作为C#初学者,非常感谢。我在这里主要使用它们来练习错误处理语法,因此这非常有用。(老实说,如果我是“在现实生活中”编写此程序的话)我不会在这种情况下抛出异常,因为它们不是真正的“异常”)