Перевірте свій код, як хтось, хто використовував би його після прочитання документації. Не перевіряйте нічого на основі знань, які у вас є, тому що ви написали або прочитали код. Ви хочете переконатися, що ваш код поводиться належним чином.
У найкращому випадку ви повинні мати змогу використовувати свої тести як приклади, а тести на Python - хороший приклад для цього.
Якщо ви дотримуєтесь цих вказівок, зміна впровадження не повинна бути проблемою.
Також на моєму досвіді хорошою практикою є тестування кожного "шару" вашого додатка. У вас будуть атомні одиниці, які самі по собі не мають залежностей, і ви будете мати одиниці, які залежать від інших одиниць, поки врешті не дійдете до програми, яка сама по собі є одиницею.
Вам слід протестувати кожен шар, не покладайтесь на той факт, що тестуючи блок A, ви також тестуєте блок B, від якого залежить блок A (правило стосується також успадкування.) Це теж слід трактувати як деталь реалізації, навіть хоча ви можете почуватися так, ніби повторюєтеся.
Майте на увазі, що колись письмові тести навряд чи зміняться, тоді як код, який вони тестують, зміниться майже напевно.
На практиці також існує проблема вводу-виводу та зовнішнього світу, тому ви хочете використовувати інтерфейси, щоб при необхідності можна було створювати макети.
У більш динамічних мовах це не така велика проблема, тут ви можете використовувати набір качок, множинне успадкування та міксини для складання тестових кейсів. Якщо ви починаєте не любити спадщину взагалі, ви, мабуть, робите це правильно.