Python'da yazı birimi testleri: Nasıl başlayabilirim? [kapalı]


534

İlk uygun projemi Python'da tamamladım ve şimdi görevim bunun için testler yazmak.

İlk kez bir proje yaptığım için, ilk kez testler yazıyordum.

Soru, nasıl başlayacağım? Hiçbir fikrim yok. Herkes beni yazma testleri ile başlamak için kullanabileceğiniz bazı belgeleri / öğretici / bağlantı / kitap işaret edebilir (ve özellikle birim test sanırım)

Bu konuda herhangi bir tavsiye memnuniyetle karşılanacaktır.


4
Eğer niyetiniz bu ise test yazmak için asla geç değildir. Şikayet eden herkes için hiç
yoktan

1
İşte çevrimiçi ücretsiz dışarı iyi bir test odaklı geliştirme kitap: chimera.labs.oreilly.com/books/1234000000754/index.html
Will

4
iyi bir kaynak https://www.jeffknupp.com/blog/2013/12/09/improve-your-python-understanding-unit-testing/ üzerine tökezledim . Python'a yeni başlayan biri olarak, bunu anlaşılabilir buldum.
feribot

2
Otostopçunun Python Rehberi, birim test araçlarına kısa bir genel bakışa sahiptir: python-guide-pt-br.readthedocs.io/en/latest/writing/tests
Anton Tarasenko

Kılavuzda başlamak için harika bir yer olan github.com/kennethreitz/samplemod üzerinde de bir örnek kod deposu olduğu için önceki yorum daha yüksek olarak derecelendirilmelidir .
setempler

Yanıtlar:


101

Unittest'leri kullanmakta yeniyseniz, öğrenmenin en basit yaklaşımı genellikle en iyisidir. Bu temelde varsayılan modülpy.test yerine kullanmanızı öneririmunittest .

Aynı şeyi yapan bu iki örneği ele alalım:

Örnek 1 (birim test):

import unittest

class LearningCase(unittest.TestCase):
    def test_starting_out(self):
        self.assertEqual(1, 1)

def main():
    unittest.main()

if __name__ == "__main__":
    main()

Örnek 2 (pytest):

def test_starting_out():
    assert 1 == 1

Her iki dosyanın da adlandırıldığı varsayılarak test_unittesting.py , testleri nasıl yapabiliriz?

Örnek 1 (birim test):

cd /path/to/dir/
python test_unittesting.py

Örnek 2 (pytest):

cd /path/to/dir/
py.test

7
Birden fazla yerde py.test'in basitliğini duydum ( docs.python-guide.org/en/latest/writing/tests/#py-test , docs.python.org/3.5/library/unittest.html#module -unittest , jeffknupp.com/blog/2013/12/09/... ) Neden olduğu unit-testhala standart kütüphanede dahil, eğer py.testve nosedaha basit arayüzü ile aynı işlevselliği sağlamak? Sadece geriye dönük uyumluluk sağlamak mı yoksa sağlayamayacağı ve sağlayamayacağı unittestbazı avantajları var mı? py.testnosetest
alpha_989

@ alpha_989 Standart python kitaplığının mevcut en iyi araçları içermesi amaçlanmamıştır. PyPI bunun için. Standart unittestpaket hala yeterince iyi. Öyle standart o tür iyi işe garantili ait olduğunu hangi araçlar. Son olarak, kodunuzu kullanan herkesin ek paket yüklemesine gerek yoktur.
Jeyekomon

72

Ücretsiz Python kitabı Dive Into Python , birim testiyle ilgili yararlı bulabileceğiniz bir bölüme sahiptir .

Modern uygulamaları takip ediyorsanız, muhtemelen projenizi yazarken testleri yazmalı ve projeniz neredeyse bitene kadar beklememelisiniz.

Şimdi biraz geç, ama şimdi bir dahaki sefere biliyorsun. :)


13
Hala birim testleri olmayan kodu yeniden düzenlemek istiyorsanız, önce bunun için birim testleri yazmanız gerektiğini söyleyebilirim
Hubert Kario

9
Evet, ilk kez birim testlere gelen birçok insan, "iyi, şu anki projeniz için biraz geç" gibi şeyleri eski ellerden duyuyor: yeni söyledikleri şey bu olmasa bile, yeni başlayanlar duyuyor . Bu bir ağaç dikme konusunda Çin atasözü gibi: testlere başlamak için en iyi zaman bir projenin başlangıcında; Testlere başlamak için en iyi ikinci zaman şimdi!
JP

4
Python bağlantısına
dalma

40

Bence, kontrol edilmesi iyi üç büyük python test çerçevesi var.
ünite testi modülü, tüm python dağıtımları
burnuyla standart olarak gelir - unittest testlerini çalıştırabilir ve daha az kazan plakasına sahiptir.
pytest - ayrıca unittest testleri yapar, daha az kaynatma plakası , daha iyi raporlama, birçok harika ekstra özellik içerir

Tüm bunları iyi bir şekilde karşılaştırmak için, her birinin tanıtımlarını okuyun. http://pythontesting.net/start-here adresindeki .
Ayrıca fikstürler ve daha fazlası hakkında genişletilmiş makaleler var.


35

Unittest için belgeler başlamak için iyi bir yer olurdu.

Ayrıca, şimdi biraz geç, ancak gelecekte projenin öncesinde veya sırasında birim testleri yazmayı düşünün. Bu şekilde, bunları ilerledikçe test etmek için kullanabilirsiniz ve (teoride) kod değişikliklerinizin mevcut herhangi bir kodu kırmadığını doğrulamak için bunları regresyon testleri olarak kullanabilirsiniz. Bu size test senaryoları yazmanın tüm avantajını sağlayacaktır :)


Bu, test odaklı bir geliştirme istiyorsanız, ki bu kötü bir şey değildir. Benim durumumda, mevcut koda bakıyorum ve geçmek için testler yazarak ve değiştirerek anlamaya çalışıyorum ve bu beni başlattı unittest. İşleri askıya aldığımda, geliştirme için daha fazla kullanacağım ve her birim için test örneği sayısını artıracağım.
icedwater

27

unittest standart kütüphane ile birlikte geliyor, ama size tavsiye ederim nosetests .

" burun, testi kolaylaştırmak için unittest'i uzatır. "

Ben de tavsiye ederim pylint

" Python kaynak kodu analiz eder hata ve düşük kaliteli işaretler arıyor. "


8

Diğerlerinin zaten cevapladığı gibi, birim testleri yazmak için geç, ancak çok geç değil. Soru, kodunuzun test edilebilir olup olmadığıdır. Gerçekten de, mevcut kodu test etmek kolay değildir, bununla ilgili bir kitap bile vardır: Eski Kod ile Etkili Çalışma ( önemli noktalara veya öncü PDF'ye bakın ).

Şimdi birim testleri yazmak ya da yazmamak sizin çağrınızdır. Bunun sıkıcı bir görev olabileceğini bilmeniz gerekir. Ünite testini öğrenmek veya önce kabul (uçtan uca) testleri düşünmek ve kodu değiştirdiğinizde veya projeye yeni bir özellik eklediğinizde birim testleri yazmaya başlayabilirsiniz.


2
+1 "Eski Kod ile Etkili Çalışma". Her şey test olmayan kodla ilgili.
David

3

nosetests python'da birim testi için mükemmel bir çözümdür. Unittest tabanlı test senaryolarını ve doctest'leri destekler ve sadece basit yapılandırma dosyası ile başlamanıza yardımcı olur.


Burun bağlantınız eski. Görünüşe göre yeni konum: nose.readthedocs.org/en/latest
odigity

1
Github üzerinde dokümantasyon ve nosetest sitesi, gereğince noseve nose2maintanance modundasınız. py.testÇok daha fazla desteği olduğu için başlamak daha iyi
alpha_989
Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.