据我所知,单元测试线程安全性没有“好的”通用解决方案。但我想要一个针对特定问题的良好解决方案。
让我们考虑这个(虚拟)动态列表实现。 add
方法显然不是线程安全的。由于使其线程安全是非常明显的(让我们考虑一下我们不会实现任何 remove
方法并保持其虚拟),如何对这段代码进行单元测试以显示它是< em>实际上不是线程安全的,并表明线程安全修复实际上有效(或似乎有效)?
public class ArrayList {
private int capacity = 2;
private Object[] content = new Object[capacity];
private int size;
public void add(Object object) {
if (size == capacity) {
ensureCapacity();
}
content[size++] = object;
}
public Object get(int index) {
if (index >= size) {
throw new IndexOutOfBoundsException();
}
return content[index];
}
private void ensureCapacity() {
int extendedCapacity = capacity * 2;
Object[] extended = new Object[extendedCapacity];
System.arraycopy(content, 0, extended, 0, size);
this.capacity = extendedCapacity;
this.content = extended;
}
}
最佳答案
您可以尝试一些实用程序,例如 jcstress http://openjdk.java.net/projects/code-tools/jcstress/或织线工https://github.com/google/thread-weaver谁将检测您的字节代码并为您的实现生成压力测试。
关于java - 线程安全单元测试,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31921959/