J'essaye de tester java.util.concurrent.ConcurrentLinkedQueue quand on y accède via plusieurs threads. Mentionné ci-dessous est mon test Junit en utilisant RepeatedTest pour exécuter dans deux threads simultanés. Mes questions sont: est-il correct d'utiliser RepeatedTest pour tester la concurrence par exemple sur ConcurrentLinkedQueue? Le code source est mentionné ci-dessous.Junit pour tester la simultanéité
Merci
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);
}
Cela est également vrai pour les problèmes sans simultanéité. Pour citer 'Edsger W. Dijkstra': * Les tests montrent la présence, pas l'absence de bugs. *. – whiskeysierra
@Willi, absolument! C'est juste que les problèmes de concurrence ont tendance à être plus difficiles à détecter, je pense. – Bruno
Bien sûr, vous pouvez écrire des tests pour les problèmes de concurrence. Vous ne pouvez certainement pas écrire des tests qui prouvent l'absence de bugs, mais vous pouvez toujours tester la présence de bugs spécifiques. Ces tests peuvent être compliqués à écrire cependant. –