Managing course enrollment
You could get rid of the service methods, initialise the values in the initialize method.  And then in a subclass set a service that doesn't actually do anything with the enrollment.

class Enrolments::Suspend
  ...
  def initialize
    @responses = []
    # get rid of the methods and set the services in the intitialiser
    @event_service ||= Events::Outgoing::Enrolments::SuspendedEnrolment.new
    @suspend_enrolment_presentation_service ||= Enrolments::EnrolmentPresentations::Suspend.new
  end
  ...
end

class EnrollmentWithoutEvent &lt; Enrolments::Suspend
  ...
  def initialize
    super
    # do default config here
    @event_service ||= Events::DoNothing.new
  end
  ...
end


Or, you could create a subclass that overrides the raise_suspended_enrolment_event method:

class Enrolments::SuspendWithoutErrors &lt; Enrolments::Suspend
  def raise_suspended_enrolment_event
    # change the implementation here
  end
end


Another options would be to use class_attribute for your service objects/procs:

class Enrolments::Suspend
  ...
  class_attribute :event_service, :suspend_enrolment_presentation_service
  ...
end


Then, when you subclass, you get set your services per class or instance and can  change/add the services on any sub-classes or instances of sub-classes.  Have a look at here for how it works.  This method means that you can create classes with specific services, and when you instantiate the class, the instances also use the same services.

For example:

class Enrolments::Suspend
  ...
  class_attribute :event_service, :suspend_enrolment_presentation_service

  # create the services used for this class
  self.event_service = proc {|enrollment| ... }
  self.suspend_enrolment_presentation_service = proc {|e| ... }
end

class SuspendWithoutError &lt; Enrolments::Suspend
  # override one of the services but keep the rest
  self.suspend_enrolment_presentation_service = proc {|e| ... }
end


The final option is to use actual methods:

class Enrolments::Suspend
  ...

  def event_service(enrollment)
    ...
  end

  def suspend_enrolment_presentation_service(enrollment)
    ...
  end
end


This allows any sub-classes to override the methods.