Quais são as melhores práticas em relação ao teste unitário de uma biblioteca / framework?

Contexto

Estou lutando para escrever um conjunto de testes unitários para uma biblioteca / estrutura que estou projetando. Para contexto, por favor, pense em minha biblioteca como uma camada de objeto sobre um conjunto hierárquico de objetos relacionados.

Questão

Basicamente, eu estou tentando aderir aos princípios e melhores práticas sobre testes unitários como visto emalguns posts Aqui, mas eles parecem conflitantes em relação à unidade especificamente testando uma biblioteca ou framework.

Por exemplo, um teste básico diz respeito a "criar um artefato". E outro com "remover um artefato". Mas, como um teste de unidade deve ser independente e restaurar o estado do mundo após a sua conclusão, ambos os testes parecem relacionados: ao testar a criação de artefato, precisamos limpar o estado no final do teste removendo-o. Isso significa que a remoção de artefatos é ela própria testada implicitamente. E o mesmo raciocínio se aplica à remoção de artefatos de teste: para configurar o mundo para que a remoção de artefatos seja testável, precisamos criar um novo artefato primeiro.

A situação é agravada quando precisamos testar a criação e remoção de sub-artefatos relacionados, para os quais precisaremos configurar o mundo de acordo.

O que eu estou inclinando é executar um conjunto de testes unitários relacionados em seqüência, para que cada teste unitário seja discreto (isto é, teste somente uma coisa e uma coisa apenas), mas depende de testes anteriores na sequência para configurar progressivamente o mundo. Então, minha sequência poderia ser assim:

[criar artefato] -> [criar sub artefato] -> [remover sub artefato] -> [remover artefato]

Com esse princípio, toda a biblioteca / estrutura é testada por unidade e o estado do mundo é restaurado no final de toda a execução do conjunto de testes. No entanto, isso significa que qualquer falha no meio do conjunto de testes "quebra o mundo".

Quais são algumas das melhores práticas e diretrizes que podem ser úteis para reconciliar essas necessidades conflitantes?

Referências

O que faz um bom teste de unidade?

É uma má forma ter um teste de unidade chamando outros testes de unidade?

questionAnswers(6)

yourAnswerToTheQuestion