Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/unit-testing/4.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 未引发异常,或者测试方法未识别引发的异常?_C#_Unit Testing_Exception - Fatal编程技术网

C# 未引发异常,或者测试方法未识别引发的异常?

C# 未引发异常,或者测试方法未识别引发的异常?,c#,unit-testing,exception,C#,Unit Testing,Exception,[这是Taxi类的uml图。还有另一个类名Rank,这就是为什么我将属性Rank设置为具有名为Rank的类的变量。] 我有这个测试方法: [TestMethod] public void _07_SetRankToNullThrowsException() { Taxi t = new Taxi(1); Assert.ThrowsException<Exception>(() => t.rank = null); } 在UML图中,我应该使属性rank具有一

[这是Taxi类的uml图。还有另一个类名Rank,这就是为什么我将属性Rank设置为具有名为Rank的类的变量。]

我有这个测试方法:

[TestMethod]
public void _07_SetRankToNullThrowsException()
{ 
    Taxi t = new Taxi(1);
    Assert.ThrowsException<Exception>(() => t.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;
        }
        
    } 
}

因为您是在访问自己的属性的getter中,所以它本身永远是循环的。如果您添加要写入控制台的代码,就可以看到这一点-

public Rank rank { 
    get 
    { 
         Console.WriteLine("uh oh"); //Here
         return rank; 
    }
   
    set
    {

        if (rank == null)
        {
            throw new Exception("Rank cannot be null");
        }
        else 
        {
            rank = null;
        }
        
    } 
}

你会看到大量的这些被写出来。您需要使用不同的名称和变量作为此属性的支持字段。

在我看来,部分问题可能在于命名-您有一个名为rank的属性,您可以在其中访问属性本身以发现其值

在属性设置器中,使用关键字value访问要设置的传入值。您可以使用此选项确定传入值是否为null:

您还需要有一个备份字段来存储属性值,您还没有显示该属性值。通常,支持字段是私有的,并且是camelCase,而关联的属性是PascalCase。这种差异在这种情况下很有用,因为我们可以从rank访问rank

像这样的事情应该可以做到:

// Backing field to store the value for the 'Rank' property
private string rank = string.Empty;  // It could technically be set to 'null' here :)

public string Rank 
{ 
    get { return rank; }
   
    set
    {
        if (value == null)
        {
            throw new Exception("Rank cannot be null");
        }
        else if (rank != value)
        {
            rank = value;
        }
    } 
}

你能和我一起坐出租车吗?也就是说,出租车1是否在排名?还有什么是等级?它是一个类还是一个结构?结构是值类型,永远不能为空。对不起,这两个等级把我搞糊涂了。对于第一个问题,您确定没有编译错误吗?C区分大小写。”“等级”和“等级”不是相同的项目名称。但是在您的示例代码中,您有公共字符串rank{get{return rank;}}。这不应该编译,或者如果编译了,它应该会导致无限循环异常,因为这就是您所拥有的。也许你指的是公共字符串Rank{get{return Rank;}},其中'Rank'是属性名,'Rank'是支持此属性的私有变量。最后一条评论:因此我创建了一个新项目,其中有一个类具有公共字符串Rank{get{return Rank;}。它确实可以编译,但一旦我尝试访问该属性,我就会得到一个StackOverFlowException.if-rank==null应该是if-value==null请不要通过破坏您的帖子来为其他人做更多的工作。通过在Stack Exchange SE网络上发布,您已根据a授予SE分发内容的不可撤销权利,即无论您未来的选择如何。根据SE政策,分发非故意破坏版本。因此,任何故意破坏行为都将恢复原状。请参阅:。如果允许删除,在帖子下方左侧有一个删除按钮,但它只在浏览器中,而不是在移动应用程序中。
// Backing field to store the value for the 'Rank' property
private string rank = string.Empty;  // It could technically be set to 'null' here :)

public string Rank 
{ 
    get { return rank; }
   
    set
    {
        if (value == null)
        {
            throw new Exception("Rank cannot be null");
        }
        else if (rank != value)
        {
            rank = value;
        }
    } 
}