Testing Asynchronous Methods
Problem
You want to test asynchronous methods.
Solution
Use a mock listener to wait for the asynchronous method to complete.
Discussion
An asynchronous method executes in its own thread, notifying some listener when it is complete. Code that calls an asynchronous method does not block, meaning that you cannot write a test like this:
public void testSomething( ) {
someAsynchronousMethod( );
assertXXX(...);
}The problem with this code lies in the fact that the
assertXXX( ) is almost certainly executed before
the thread started by someAsynchronousMethod( )
has a chance to do its work. We really need to do something like
this:
Call an asynchronous method.
Wait until the method is complete.
Get the results.
If the method times out, fail.
Otherwise, check the results.
To illustrate, let’s look at a simple interface for
searching. We assume that searching occurs in its own thread,
notifying a SearchModelListener whenever the
search is complete. Example 4-8 shows the
API.
Example 4-8. SearchModel interface
public interface SearchModel {
void search(Object searchCriteria, SearchModelListener listener);
}The search( ) method is asynchronous, notifying
the SearchModelListener when it is complete. Example 4-9 shows the code for the SearchModelListener
interface.
Example 4-9. SearchModelListener interface
public interface SearchModelListener extends EventListener {
void searchFinished(SearchModelEvent evt);
}In order to test the search model, we must write a mock listener that ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Read now
Unlock full access