using System.Collections.Generic; using Masuit.Tools.Systems; using Xunit; namespace Masuit.Tools.Abstractions.Test.Systems; public class DisposableConcurrentDictionaryTests { [Fact] public void Constructor_Default_ShouldInitialize() { var dictionary = new DisposableConcurrentDictionary(); Assert.NotNull(dictionary); } [Fact] public void Constructor_WithFallbackValue_ShouldInitialize() { var fallbackValue = new DisposableValue(); var dictionary = new DisposableConcurrentDictionary(fallbackValue); Assert.NotNull(dictionary); } [Fact] public void Constructor_WithConcurrencyLevelAndCapacity_ShouldInitialize() { var dictionary = new DisposableConcurrentDictionary(4, 100); Assert.NotNull(dictionary); } [Fact] public void Constructor_WithComparer_ShouldInitialize() { var comparer = EqualityComparer>.Default; var dictionary = new DisposableConcurrentDictionary(comparer); Assert.NotNull(dictionary); } [Fact] public void Dispose_ShouldDisposeAllValues() { var value1 = new DisposableValue(); var value2 = new DisposableValue(); var dictionary = new DisposableConcurrentDictionary { ["key1"] = value1, ["key2"] = value2 }; dictionary.Dispose(); Assert.True(value1.IsDisposed); Assert.True(value2.IsDisposed); } [Fact] public void Dispose_MultipleTimes_ShouldNotThrow() { var dictionary = new DisposableConcurrentDictionary(); dictionary.Dispose(); var exception = Record.Exception(() => dictionary.Dispose()); Assert.Null(exception); } } public class DisposableValue : Disposable { public bool IsDisposed { get; private set; } /// /// 释放 /// /// public override void Dispose(bool disposing) { IsDisposed = true; } }