Before we start I want to point out that this point of view is largely colored by developing EPiServer sites. For those of you who don’t know the product it’s WebForms based system and the code base in many places lacks abstractions.
Unit tests are great for driving the code I need to write forward. They are there to make sure that I don’t break something and also serves as documentation for other people looking at the code. But they can also be somewhat of a pain during large refactorings where you change the internal API. The end-to-end tests are however less likely to suffer from changes to the internal API since they often start at the highest level. In a typical EPiServer site this could be the UI-layer or the client facing service layer.
In the next greenfield EpiServer project I work with I’ll probably focus more on integration tests that goes to the database and UI-test instead of classic unit tests. This is partly because the required infrastructure for unit testing is not there out of the box. I would have to build it. Depending on the size of the site and the complexity this could be considered stealing from the business. It’s all about the most bang for the buck.