c# - 我应该在编写任何锁之前对多线程问题进行单元测试吗?

标签 c# .net multithreading unit-testing tdd

我正在编写一个我知道需要锁的类,因为该类必须是线程安全的。但由于我是测试驱动开发,我知道我不能在为它创建测试之前编写一行代码。而且我发现很难做到,因为测试最终会变得非常复杂。在这些情况下你通常会怎么做?有什么工具可以帮助解决这个问题吗?

这个问题是 .NET 特定的

有人要代码:

public class StackQueue
{
    private Stack<WebRequestInfo> stack = new Stack<WebRequestInfo>();
    private Queue<WebRequestInfo> queue = new Queue<WebRequestInfo>();

    public int Count
    {
        get
        {
            return this.queue.Count + this.stack.Count;
        }
    }

    public void Enqueue(WebRequestInfo requestInfo)
    {
        this.queue.Enqueue(requestInfo);
    }

    public void Push(WebRequestInfo requestInfo)
    {
        this.stack.Push(requestInfo);
    }

    private WebRequestInfo Next()
    {
        if (stack.Count > 0)
        {
            return stack.Pop();
        }
        else if (queue.Count > 0)
        {
            return queue.Dequeue();
        }
        return null;
    }
}

最佳答案

好吧,您通常可以使用 ManualResetEvent 之类的东西在释放门之前让一些线程进入预期的问题状态……但这只涵盖了线程问题的一小部分。

对于更大的线程错误问题,有 CHESS (进行中)- 将来可能是一个选项。

关于c# - 我应该在编写任何锁之前对多线程问题进行单元测试吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/791682/

相关文章:

java - 使用多线程将文本文件拆分为Java中的 block

c# - C#在线程间安全使用LINQ

c# - 没有装箱的 Marshal.StructureToPtr

c# - 匹配 .html 之前和之后的文本的正则表达式/

.net - MVVM 没有意义吗?

.net - SqlBulkCopy 的建议批量大小是多少?

java - 防止mysql脏读

c# - KINECT:如何使用 Kinect 识别用户何时向上或向下行走?

c# - MySql.Data c# .net 库我应该使用哪个运行时?

c# - 多个数据库的 EF Code First 迁移