Hay otras preguntas sobre este tema, pero estoy tratando de averiguar cómo acercarse a la unidad de pruebas algo como esto:Cómo escribir pruebas unitarias que pone a prueba invariantes de concurrencia
public class Semaphore extends Lock {
private AtomicInteger semaphore = new AtomicInteger(0);
public synchronized boolean available() {
return semaphore.intValue() == 0;
}
public synchronized void acquire() {
semaphore.incrementAndGet();
}
public synchronized void release() {
semaphore.decrementAndGet();
}
}
Ésta es mi mecanismo de andar por casa de bloqueo (solo para fines de aprendizaje). ¿Cómo probaría la seguridad del hilo de esto? Sé que no hay garantías cuando se trata de probar un código concurrente, pero ¿cómo voy a escribir una prueba unitaria que INTENTE probar las constantes invariaciones inherentes a este mecanismo de bloqueo?
¿El análisis estático está fuera de cuestión? – UmNyobe
No, no del todo descartado. Pero me pregunto cómo sería una prueba unitaria para algo como esto ... una vez más, admitiendo que ninguna cantidad de pruebas unitarias garantiza nada cuando se trata de concurrencia. – LuxuryMode
En general, empleas varios trucos: ejecuta un montón de hilos distribuidos al azar, liberando un bloqueo en un hilo mientras otros dos hilos están girando sobre él, etc. Es un arte. –