One option would be to offer a testing helper for stubbing services. Something like this:

```js
injectServices(controller, {
  geolocation: myGeolocationStub
});
```

It could use defineProperty to override the read-only CP. That being said, I'd really hate to lose the obviousness of just replacing the property and creating yet-another concept that people have to understand in order to be able to test properly.

@stefanpenner Can you maybe expand on what the self-troll case is? This isn't something I've ever run into so I want to understand why it's been so painful for you.