Как написать юнит-тест для класса? - PullRequest
0 голосов
/ 14 февраля 2020
class Hand:

def __init__(self,cards, total, soft_ace_count):
    self.cards = cards
    self.total = total
    self.soft_ace_count = soft_ace_count


def __str__(self):
    return(str(self.cards)+','+str(self.total)+','+str(self.soft_ace_count))


def add_card(self):
    self.cards.append(get_card())
    self.score()


def is_blackjack(self):
    return len(self.cards)==2 and self.total==21


def is_bust(self):
    return self.total > 21

def score(self):
    self.total=0
    self.soft_ace_count=0

    for x in self.cards:
        if x > 10:
            x=10
        self.total+=x

    #the following code will decide 1 =11 or 1 = 1
    if self.total <= 11 and 1 in self.cards:
        self.total+=10
        self.soft_ace_count+=1

Я пытаюсь написать unittest для этого класса 'Hand'. Нужна ли мне установка init для этого конкретного юнит-теста? Вот часть кода моего юнит-теста. Большое спасибо, если кто-нибудь может мне помочь с этим. Я только начал в python. Любые предложения помогут. Спасибо. Пропустить отступ

class hand(unittest.TestCase):

def __init__(self):
    self.cards=cards
    self.total = total
    self.soft_ace_count = soft_ace_count

1 Ответ

0 голосов
/ 14 февраля 2020

Предполагая, что ваш класс находится в модуле с именем hand.py, вы можете поместить свой скрипт unittest в тот же каталог. Это может выглядеть так:

import unittest
from hand import Hand

class hand(unittest.TestCase):

    def test_init(self):
        cards = []
        h = Hand(cards, 0, 0)
        self.assertEqual(h.total, 0)
        self.assertEqual(h.soft_ace_count, 0)
        self.assertEqual(len(h.cards), 0)

    # def test_blackjack(self):
        #....


    # def test_score(self):
        #.... 


    # def test_OTHERTHINGS(self):
        #.....

if __name__ == '__main__':
    unittest.main()

Если вы назовете свой unittestscript, например, unittesthand.py, вы можете запустить его через "python unittestscript.py". Вы получите следующий результат:

> .
----------------------------------------------------------------------
Ran 1 test in 0.000s

OK

Компонент unittest выполнил все методы, начиная с «test», и выполнил. В примере метод "test_init". Это НЕ инициализация теста, а тестирование модуля для инициализации класса Hand.

Теперь измените, например, код на «self.assertEqual (h.total, 1)», и вы увидите, что Компонент unittest сообщает об ошибке.

Теперь вы можете создавать дополнительные случаи для других методов. Вы также можете создать базовый тестовый пример с кодом, который всегда выполняется до и после юнит-тестов и так далее ...

...