Het gaat om dit stukje code:
Dit is een unittest een request van een thread voor een bepaalde runnable aan een klasse ThreadMonitor. ThreadMonitor gaat voor de runnable een thread aanmaken, en deze starten. (Ik weet het, ingewikkelde constructie, maar daar zijn redenen voor.) threadStarted is een static field van de testklasse.
Nu, om te testen of hij die thread wel mooi aanmaakt en start heb ik deze testmethode geschreven. De test slaagt gewoon. Maar, ik heb er serieuze bedenkingen bij. Je kan namelijk niet weten of hij eerst die 'assertTrue' gaat doen, of eerst threadStarted op true zet. Ik weet het, ik kan synchronizen op dat object, maar dat lost nog altijd niets op, want ik weet nog altijd niet wie eerst het lock gaat krijgen.
Een mogelijke oplossing is gewoon 0.1s wachten voor ik ga checken, maar dat is betrekkelijk vuil. En ik kan me nog wel iets bedenken met notifiers, maar het blijft een testmethode, dus ik denk/hoop dat het niet zo moeilijk hoeft. Ik heb het gevoel dat de oplossing erg gemakkelijk is, maar ja...
Wat heb ik gedaan? Vooral opgezocht in 'Java: Concurrency in practice', maar daar vind ik het niet echt.
Java:
1
2
3
4
5
6
7
8
9
10
| @Test public void testRequestThread() { threadStarted=false; monitor.requestThread(new Runnable(){ public void run(){ ThreadMonitorTest.threadStarted=true; } }, "TestThread", 0); assertTrue(threadStarted); } |
Dit is een unittest een request van een thread voor een bepaalde runnable aan een klasse ThreadMonitor. ThreadMonitor gaat voor de runnable een thread aanmaken, en deze starten. (Ik weet het, ingewikkelde constructie, maar daar zijn redenen voor.) threadStarted is een static field van de testklasse.
Nu, om te testen of hij die thread wel mooi aanmaakt en start heb ik deze testmethode geschreven. De test slaagt gewoon. Maar, ik heb er serieuze bedenkingen bij. Je kan namelijk niet weten of hij eerst die 'assertTrue' gaat doen, of eerst threadStarted op true zet. Ik weet het, ik kan synchronizen op dat object, maar dat lost nog altijd niets op, want ik weet nog altijd niet wie eerst het lock gaat krijgen.
Een mogelijke oplossing is gewoon 0.1s wachten voor ik ga checken, maar dat is betrekkelijk vuil. En ik kan me nog wel iets bedenken met notifiers, maar het blijft een testmethode, dus ik denk/hoop dat het niet zo moeilijk hoeft. Ik heb het gevoel dat de oplossing erg gemakkelijk is, maar ja...
Wat heb ik gedaan? Vooral opgezocht in 'Java: Concurrency in practice', maar daar vind ik het niet echt.