gpt4 book ai didi

java - Junit 测试并发

转载 作者:塔克拉玛干 更新时间:2023-11-03 05:11:26 25 4
gpt4 key购买 nike

我正在尝试在通过多线程访问时测试 java.util.concurrent.ConcurrentLinkedQueue。下面提到的是我使用 RepeatedTest 在两个并发线程中运行的 Junit 测试。我的问题是:使用 RepeatedTest 在 ConcurrentLinkedQueue 上测试并发性是否正确?源代码如下。

谢谢

import java.util.concurrent.ConcurrentLinkedQueue;
import junit.extensions.ActiveTestSuite;
import junit.extensions.RepeatedTest;
import junit.extensions.TestSetup;
import junit.framework.TestCase;

public class TestNonBlockingConcurrentQueue extends TestCase{

private static ConcurrentLinkedQueue clq;

public void testPut() throws Exception {
int messageCounter = 0;
for(;messageCounter <10000; messageCounter++){
clq.offer(messageCounter);
}
assertEquals(clq.size(), messageCounter);
}

public void testGet() throws Exception {
while(!clq.isEmpty()){
clq.poll();
}
assertEquals("Size should be zero", clq.size(), 0);
}

public static junit.framework.Test suite( ) {
ActiveTestSuite ats = new ActiveTestSuite();

TestSetup setup = new TestSetup(ats) {
protected void setUp() throws Exception {
System.out.println("Creating ConcurrentLinkedQueue..");
clq = new ConcurrentLinkedQueue();
}
protected void tearDown( ) throws Exception {
clq = null;
}
};
ats.addTest(new RepeatedTest(new TestNonBlockingConcurrentQueue("testPut"), 2));
ats.addTest(new RepeatedTest(new TestNonBlockingConcurrentQueue("testGet"), 2));
return setup;

}

public TestNonBlockingConcurrentQueue(String testName){
super(testName);
}

最佳答案

JUnitPerf 使用 RepeatedTest 来测试并发代码,因此使用它来对上面的测试做同样的事情似乎是合理的,请参阅:

http://www.clarkware.com/software/JUnitPerf.html

还有其他方法可以对并发代码进行单元测试,尽管它们都不能真正验证您的代码是线程安全的:

另见:Unit Testing Concurrent Code

关于java - Junit 测试并发,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/4026486/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com