When doing some testing using anonymous apex I encountered the following exception:
System.FinalException: ApexPages.addMessage can only be called from a Visualforce page
The solution was to check if there was a current page before attempting to add the message:
if(ApexPages.currentPage() != null){ ApexPages.addMessage(new ApexPages.Message(ApexPages.Severity.ERROR, 'Some very important message for the user')); }