利用 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/