【发布时间】:2021-04-22 00:12:34
【问题描述】:
[这是Taxi类的uml图。还有另一个类名“Rank”,这就是为什么我将属性“rank”设置为具有名为“Rank”的类的变量。]
我有这个测试方法:
[TestMethod]
public void _07_SetRankToNullThrowsException()
{
Taxi t = new Taxi(1);
Assert.ThrowsException<Exception>(() => t.rank = null);
}
如果“rank”为空,我应该抛出一个异常,这在这段代码中可以清楚地看到,但测试资源管理器无法识别抛出的异常,或者只是没有抛出异常:
public string rank {
get { return rank; }
set
{
if (rank == null)
{
throw new Exception("Rank cannot be null");
}
else
{
rank = null;
}
}
}
在 UML 图中,我应该让属性“rank”具有一个名为“Rank.cs”的类的变量(下面的代码)我也尝试过运行此代码,但它也没有不要抛出异常。:
public Rank rank {
get { return rank; }
set
{
if (rank == null)
{
throw new Exception("Rank cannot be null");
}
else
{
rank = null;
}
}
}
【问题讨论】:
-
能分享一下Taxi的构造函数吗? IE,是 Taxi(1) 设置等级吗?还有什么是等级?是类还是结构?结构是值类型,永远不能为空。
-
对不起,这两个等级让我感到困惑。对于第一个,你确定你没有编译错误吗? C# 区分大小写。 'rank' 和 'Rank' 不是相同的项目名称。但是在您的示例代码中,您有
public string rank { get { return rank; }}。这不应该编译,或者如果编译,它应该导致无限循环异常,因为这就是你所拥有的。也许您的意思是public string Rank { get { return rank; }},其中“Rank”是属性名称,“rank”是支持该属性的私有变量。 -
最后一条评论:所以我创建了一个带有
public string rank { get { return rank; }}的类的新项目。它确实可以编译,但是一旦我尝试访问该属性,我就会得到一个 StackOverFlowException。 -
if (rank == null)应该是if (value == null) -
请不要通过破坏您的帖子为他人增加工作量。通过在 Stack Exchange (SE) 网络上发帖,您已根据 CC BY-SA license 授予 SE 分发内容的不可撤销权利(即无论您未来的选择如何)。根据 SE 政策,分发非破坏版本。因此,任何破坏行为都将被撤销。请参阅:How does deleting work? …。如果允许删除,则帖子下方左侧有一个“删除”按钮,但仅在浏览器中,而不是移动应用程序中。
标签: c# unit-testing exception