TDD, DDD e Encapsulamento

Depois de vários anos seguindo a má prática herdada de 'arquitetos' no meu local de trabalho e pensando que deve haver uma maneira melhor, eu tenho lido recentemente sobre TDD e DDD e acho que os princípios e práticas seriam ótimo ajuste para a complexidade do software que escrevemos.

No entanto, muitos dos exemplos de TDD que vi chamam um método no objeto de domínio e, em seguida, testam as propriedades do objeto para garantir que o comportamento seja executado corretamente.

Por outro lado, várias pessoas respeitadas na indústria (Greg Young, mais notavelmente com suas palestras sobre CQRS) defendem o encapsulamento completo de cada objeto de domínio, removendo todos os 'getters'.

Minha pergunta, portanto, é: como se testa a funcionalidade de um objeto de domínio se é proibido recuperar seu estado?

Acredito que estou sentindo falta de algo fundamental, então sinta-se à vontade para me chamar de idiota e me esclarecer - qualquer orientação seria muito apreciada.

questionAnswers(8)

yourAnswerToTheQuestion