Shared data-source instances are reused after disposal by tests registered later in the session
维护者通常 1 天内回复
还没有人认领这个 Issue。
评估
调研方向
Read src/TUnit.Core/Tracking/ObjectTracker.cs around UntrackObject, then inspect the shared-instance lookup methods in src/TUnit.Core/TestDataContainer.cs. Reproduce the issue with a disposable shared data source and a dynamic test registered after its original holder completes; verify the later test receives a new, undisposed instance. The report says the repro has not yet been run.
由索引模型根据 Issue 内容生成。
描述
What happens
When the last test holding a shared data-source instance (Shared = SharedType.Keyed, PerClass, PerAssembly or PerTestSession) completes, ObjectTracker.UntrackObject brings its reference count to zero and disposes it. TestDataContainer still caches the instance (ScopedDictionary.GetOrCreate), and it is only cleared by TestDataContainer.Reset() at the end of the session. A test that is registered later in the same session asks the container for the same key or scope, gets the disposed instance back, and gets a fresh reference count of 1 on it.
The usual way to register a test later is a dynamic test added at run time, after the original holders have completed.
Where
src/TUnit.Core/Tracking/ObjectTracker.cs,UntrackObject: disposes when the count reaches 0 and removes only the tracker entry.src/TUnit.Core/TestDataContainer.cs,GetInstanceForKey/GetInstanceForClass/GetInstanceForAssembly/GetGlobalInstance: these return the cached instance whether or not it has been disposed.
How to reproduce
- Test A:
[ClassDataSource<MyDisposable>(Shared = SharedType.Keyed, Key = "k")], whereMyDisposablerecordsIsDisposed. - Test B:
[DependsOn(nameof(A))]adds a dynamic test at run time whose class or method takes[ClassDataSource<MyDisposable>(Shared = SharedType.Keyed, Key = "k")]. - The dynamic test receives the instance that A's completion already disposed (
IsDisposed == true).
This applies whatever A's outcome is (passed, failed, or skipped once #7191 merges). I found it by reading the code while reviewing #7191, where Greptile raised it for skipped tests. I have not run the repro yet.
Expected
A test registered after a shared instance has been disposed gets a new instance. For example, the container could drop its cache entry when the tracker disposes the object (ObjectTracker.OnDisposed), or the container could skip disposed entries.
- 主要语言
- C#
- 星标
- 4k
- 派生
- 139
- 平均合并
- 7 小时 44 分钟
- 30 天内合并 PR
- 271
环境准备
在浏览器里用你自己的 GitHub 账号启动这个项目的开发容器。
- 没有 Dockerfile 或 Docker Compose 文件
- 有 Pull Request 模板
- 阅读贡献指南
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
thomhurst/TUnit 的其他 Issue
-
Flaky: RpcTests Discovery_ReturnsFullTestCatalogue times out waiting for TCP connection on macOS CI未关闭bug
难度 2/5 1-3 小时 新手友好度 67/100
维护者通常 1 天内回复
-
bug github_actions
难度 2/5 1-3 小时 新手友好度 78/100
thomhurst/TUnit#7229 · 1 条评论 ·
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 78/100
维护者通常 1 天内回复
-
JSON output still uses assembly-qualified Type.FullName for parameter and return types可能已有人在做 @Saad-elnagar 今天认领。 未关闭bug good first issue
难度 2/5 1-3 小时 新手友好度 76/100
thomhurst/TUnit#7201 · 5 条评论 ·
维护者通常 1 天内回复
-
enhancement
难度 2/5 1-3 小时 新手友好度 73/100
thomhurst/TUnit#7194 · 1 条评论 ·
维护者通常 1 天内回复
相似的 Issue
-
bug
难度 2/5 1-3 小时 新手友好度 65/100
KnifeLemon/Filee#363 ·
维护者通常 1 天内回复
-
enhancement
难度 2/5 1-3 小时 新手友好度 62/100
-
area-Native untriaged
难度 2/5 1-3 小时 新手友好度 76/100
dotnet/machinelearning#7837 ·
维护者通常 2 天内回复
-
[CI] .trgen-ignore required for several grammars.可能已有人在做 @kaby76 今天认领。 未关闭
难度 2/5 1-3 小时 新手友好度 72/100
antlr/grammars-v4#5073 ·
维护者通常 1 天内回复
-
[Enhancement]: Add a search box to the Time Zone dropdown可能已有人在做 @idumlupinar 今天认领。 未关闭Status: New
难度 2/5 1-3 小时 新手友好度 85/100
dnnsoftware/Dnn.Platform#7579 ·
维护者通常 2 天内回复