索引 -1 处的 NUnit 错误

发布于 2024-09-13 12:02:57 字数 987 浏览 3 评论 0 原文

我正在尝试 NUnit 测试从新线程向集合添加元素。这是我正在使用的测试功能:

[Test]
public void WorkerThreadAccess()
{
    string foo = "Foo";
    Collection<string> collection = new Collection<string>();
    System.Threading.Thread thread = 
              new System.Threading.Thread(() => collection.Add(foo));
    thread.Start();

    Collection<string> expected = new Collection<string> { foo };
    System.Threading.Thread.Sleep(0);
    CollectionAssert.AreEqual(expected, collection);
}

当我运行测试一次时,它就通过了。然而,在每次未关闭 NUnit GUI 的后续测试中,NUnit 都会导致断言失败并出现奇怪的错误:

预期和实际都是1[System.String]`>有 1 个元素
索引 [0] 处的值不同
字符串长度均为 3。字符串在索引 -1 处不同。
预期:“Foo”
但是是:“Foo”

任何人都可以深入了解出了什么问题吗?这些元素对我来说看起来是一样的,索引 -1 应该只在 IndexOf() 错误时返回。

编辑:我正在使用 NUnit 2.5.7

I'm attempting to NUnit test adding an element to a collection from a new thread. This is the test function I'm using:

[Test]
public void WorkerThreadAccess()
{
    string foo = "Foo";
    Collection<string> collection = new Collection<string>();
    System.Threading.Thread thread = 
              new System.Threading.Thread(() => collection.Add(foo));
    thread.Start();

    Collection<string> expected = new Collection<string> { foo };
    System.Threading.Thread.Sleep(0);
    CollectionAssert.AreEqual(expected, collection);
}

When I run the test once, it passes. However on every subsequent test without closing NUnit GUI, NUnit fails the Assert with a weird error:

Expected and actual are both <System.Collections.ObjectModel.Collection1[System.String]`> with 1 elements
Values differ at index [0]
String lengths are both 3. Strings differ at index -1.
Expected: "Foo"
But was: "Foo"

Can anyone give some insight to what is going wrong? The elements look the same to me, and index -1 should only be returned on an IndexOf() error.

EDIT: I'm using NUnit 2.5.7

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

赠意 2024-09-20 12:02:57

尝试更换
System.Threading.Thread.Sleep(0);

thread.Join();

您真正想要的是等待第二个线程完成,而不仅仅是暂停当前线程。

try replacing
System.Threading.Thread.Sleep(0);
with
thread.Join();

What you actually want is to wait for the second thread to complete, not just pause the current one.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文