Только класс, который определяет событие, может вызвать это событие. Это просто, как работает система событий в .NET.
Метод Raise, предоставляемый RhinoMocks, предназначен для использования с интерфейсами, определяющими события. В этом случае любой класс, реализующий этот интерфейс, имеет свое собственное событие и, следовательно, может вызвать его. Это также справедливо для типов, генерируемых RhinoMocks во время выполнения.
Однако, когда речь идет о классах, даже подтипы не могут вызывать события, определенные их супертипами, поэтому у нас есть идиома кодирования OnEvent.
BackgroundWorker имеет метод OnRunWorkerCompleted, который будет вызывать событие. Этот метод является виртуальным, поэтому, если вы можете заставить RhinoMocks вызывать этот защищенный метод, вы сможете вызвать событие.
Я использую Moq, который не может сделать это - я не могу вспомнить, есть ли у RhinoMocks возможность вызывать защищенных членов.
В противном случае вы можете извлечь класс теста для BackgroundWorker и добавить открытый метод, который вызывает OnRunWorkerCompleted.
Однако в качестве заключительного замечания я настоятельно рекомендую вам не пытаться выполнять модульное тестирование многопоточного кода - на этом пути стоит только боль ...