C#超出范围的对象未收集

问题描述 投票:0回答:3

我正在尝试构建我的第一个单元测试,并拥有一个分别在其构造函数和析构函数中递增和递减实例计数器的类。我进行了一个测试,以确保它可以正常运行,但失败了,看来我其他测试中的其他类实例在超出范围时没有调用其析构函数。

public class Customer
{
    public Customer()
    {
        ++InstanceCount;
    }

    public Customer(int customerId)
    {
        CustomerId = customerId;
        ++InstanceCount;
    }

    ~Customer()
    {
        --InstanceCount;
    }

    public static int InstanceCount { get; private set; }
}
[TestClass]
public class CustomerTest
    {
    [TestMethod]
    public void FullNameLastNameEmpty()
    {
        //--Arrange
        Customer customer = new Customer {FirstName = "John"};
        const string expected = "John";

        //--Act
        string actual = customer.FullName;

        //--Assert
        Assert.AreEqual(expected, actual);
    }

    [TestMethod]
    public void StaticTest()
    {
        //--Arrange
        Customer[] customers =
        {
            new Customer {FirstName = "John"},
            new Customer {FirstName = "Jane"},
            new Customer {FirstName = "Jeff"} 
        };

        //--Act

        //--Assert
        Assert.AreEqual(3, Customer.InstanceCount);
    }
}

我没有在任何地方传递引用,因此应该释放客户,但没有,我什至尝试在StaticTest()开始时调用GC.Collect()来强制调用析构函数,但仍然没有运气。] >

有人可以解释为什么会发生这种情况以及如何解决它。

我正在尝试构建我的第一个单元测试,并拥有一个分别在其构造函数和析构函数中递增和递减实例计数器的类。我进行了测试以确保它可以正常工作,但是...

c# unit-testing garbage-collection mstest destructor
3个回答
3
投票

C#不是C ++。删除器(或终结器)是用于非常特定目的的功能,即处理对象所拥有的非托管资源的处置。 将程序逻辑填充到终结器中是C#可能出现的少数非常


1
投票

0
投票
© www.soinside.com 2019 - 2024. All rights reserved.