当前位置:  开发笔记 > 程序员 > 正文

使用TDD驱逐线程安全的代码

如何解决《使用TDD驱逐线程安全的代码》经验,为你挑选了1个好方法。

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

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

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

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



1> James A Wils..:

你可以注入一个负责这一行的"提供者"(一个非常简单的工厂):

 textLineEncoder = new TextLineEncoder();

那么你的测试会注入一个非常慢的提供者实现.这样,测试中的两个线程可能更容易发生碰撞.你可以在第一个线程上等待第二个线程释放的信号量.然后测试成功将确保等待线程超时.通过给第一个线程启动,您可以确保它在第二个线程发布之前等待.

推荐阅读
重庆制造漫画社
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有