multithreading - 使用 TDD 驱除线程安全代码

标签 multithreading tdd

利用 TDD 驱逐线程安全代码的好方法是什么?例如,假设我有一个工厂方法,它利用延迟初始化只创建一个类的一个实例,然后返回它:

private TextLineEncoder textLineEncoder;
...
public ProtocolEncoder getEncoder() throws Exception {
    if(textLineEncoder == null)
        textLineEncoder = new TextLineEncoder();
    return textLineEncoder;
}

现在,我想以良好的 TDD 方式编写一个测试,迫使我使这段代码成为线程安全的。具体来说,当两个线程同时调用此方法时,我不想创建两个实例并丢弃一个。这很容易做到,但是我怎样才能编写一个测试来让我这样做呢?

我在 Java 中问这个问题,但答案应该更广泛适用。

最佳答案

这很难,虽然可能 - 可能比它的值(value)更难。已知的解决方案涉及对被测代码进行检测。讨论 here, "Extreme Programming Challenge Fourteen"值得筛选。

关于multithreading - 使用 TDD 驱除线程安全代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/537014/

相关文章:

Java - 静态方法的线程安全

c++ - 多线程程序只执行最后创建的线程?

java - 按顺序读取多个 PDF 文件

c# - 使用 Moq 和 TDD,从哪里开始?

javascript - 为 Math.Random(); 编写测试用例;密码战套路

java - 并发调用单例对象的Java方法

java - Platform.runLater,处理大量任务太慢

delphi - 可用于 Delphi 和 FreePascal 的单元测试/TDD 选项

ruby-on-rails - 从 Rails 应用程序中的现有 Controller 、模型和 View 生成所有 RSpec 规范文件

c# - 仅使用 assert 语句进行单元测试是否有效?