Reputation: 3345
Consider the following method:
/**
* Set whether messages are printed to System.out. *
* @param printOutput True to print, false for silent logging
*/
public void setPrintOutput(boolean printOutput) {
// Synchronize to messages because this field is used when a message is received
synchronized (messages) {
this.printOutput = printOutput;
}
}
This method is part of a set of several methods that involve messages
, so I want to write a test that checks that this method is synchronized on messages
. Does anyone know how I would do this?
Upvotes: 3
Views: 3056
Reputation: 2545
If you really want to unit test it then expose the message
to the test code, get it's lock in one thread and check that you cannot aquire it from another thread (with timeout preventing deadlock). As @biziclop notices you should not test that. You can measure throughput, responsiveness but testing that some particular intrinsic lock is taken is too detailed.
Upvotes: 3
Reputation: 49794
I think this is beyond unit testing because the whole point of synchronization is to provide a certain type of connection between two distant pieces of code.
You can test the way it behaves with messages
being null and not null, and that gives you full coverage. It won't say anything about whether your synchronization is semantically correct.
Upvotes: 3