Apa yang Anda gambarkan mungkin sebenarnya bukan hal yang buruk, tetapi petunjuk untuk masalah yang lebih dalam yang ditemukan oleh tes Anda
Saat sistem berubah, kami mendapati diri kami menghabiskan lebih banyak waktu memperbaiki tes yang rusak. Kami memiliki tes unit, integrasi dan fungsional.
Jika Anda dapat mengubah kode Anda, dan tes Anda tidak akan pecah, itu akan mencurigakan bagi saya. Perbedaan antara perubahan yang sah dan bug hanya fakta bahwa itu diminta, apa yang diminta (diasumsikan TDD) ditentukan oleh pengujian Anda.
data telah dikodekan dengan keras.
Data kode yang sulit dalam tes adalah hal yang baik. Tes berfungsi sebagai pemalsuan, bukan sebagai bukti. Jika terlalu banyak perhitungan, tes Anda mungkin berupa tautologi. Sebagai contoh:
assert sum([1,2,3]) == 6
assert sum([1,2,3]) == 1 + 2 + 3
assert sum([1,2,3]) == reduce(operator.add, [1,2,3])
Semakin tinggi abstraksi, semakin dekat Anda dengan algoritma, dan dengan itu, semakin dekat untuk membandingkan implementasi acutal dengan dirinya sendiri.
penggunaan kembali kode yang sangat sedikit
Penggunaan kembali kode yang terbaik dalam tes adalah imho 'Cek', seperti pada jUnits assertThat
, karena mereka menjaga tes sederhana. Selain itu, jika pengujian dapat dilakukan refactored untuk membagikan kode, kode sebenarnya yang diuji kemungkinan juga bisa , sehingga mengurangi tes menjadi tes yang menguji basis refactored.