A maior dificuldade é testar serviços que dependem de serviços terceirizados e/ou que requer permissões diferentes. Entendo que existe mocks, mas é difícil trabalhar quando uma chamada de serviço interfere no resultado da chamada seguinte.
Exemplos:
1) Serviço X.1 local chama serviço Y.1 de terceiro que grava um registro. Em seguida, serviço X.2 chama serviço Y.2 de terceiro que retorna a lista dos registros. Muitas vezes não há ambientes de testes para esses serviços terceirizados e os registros gravados terminam afetando o ambiente de produção.
2) Usuário X tem permissão de adicionar um registro mas não pode removê-lo, enquanto que usuário Y tem permissão de remover o registro mas não pode adicionar um novo. A dificuldade no teste é tanto manter a massa estável quanto verificar se o usuário de fato tem permissão para determinada ação.