If you split the application logic an put it apart from the event handler so that the latter calls your application logic then you can test your application logic just by calling it directly from the test.
If you also want to test how your plugin handles the event then you have 2 options. On one hand you can simulate a situation in which the event gets actually fired. For example, if you want to catch an upvote then create 2 users, then one could create a post and then the other one would upvote it (you can do all of this programatically). This would be the most realistic situation.
On the other hand, you could directly generate the event yourself by calling the qa_report_event function manually. This one is self explanatory.