Как создать тестовые объекты в тестах? - PullRequest
0 голосов
/ 01 марта 2011

Я создаю юнит-тесты для процесса оплаты.Существует около 20 юнит-тестов для написания некоторых положительных случаев и некоторых отрицательных.

пример:

payment_screen=PaymentScreen()

и у меня есть несколько концепций.

Первое - создать плательщикаобъект с заданными атрибутами:

payer=Payer(last_name,country_code)

код страны важен, потому что система не позволяет отправлять элементы в другие страны

Второй

payer=Payer.return_correct_payer()

что-то вроде:

класс Payer:

 @staticmethod
 def return_correct_payer():
 payer=Payer()
 payer.country_code='US'
 payer.last_name='Smith'

и в обоих вариантах

payment_screen.fill_payer_data(payer)

И еще одна концепция:

в payment_screen просто создайте два метода:

fill_payer_data_with_correct_data()

и

fill_payer_data_with_uncorrect_data()

Какой из них лучший?Или, может быть, у вас есть другая идея (я уверен, что у вас есть)

РЕДАКТИРОВАТЬ

Спасибо за ваши ответы, но это не то, что мне нужно.Я просто не хочу создавать объект Pax в каждом тестовом случае с указанием атрибутов.

У меня 20 тестовых случаев, поэтому теперь я должен написать 20 раз:

payer=Payer('Smith','US')

Я не хочупродублируйте мой код

Ответы [ 2 ]

0 голосов
/ 02 марта 2011

Эй.
Вероятно, в первую очередь вам нужно ответить с помощью mocks, но я хочу показать, как я создаю объекты в своих тестах. Поэтому, если мне нужен объект с заданными параметрами, я использую BuilderPattern (фактически измененный BuilderPattern из GOF), который выглядит следующим образом:

class User  {
    private string firstName;
    private string lastName;

    public User(){};

    //now the essence
    public User withFirstName(strFirstName) {
        this.firstName = strFirstName;
        return this;
    }

    public User withLastName(strLastName) {
        this.lastName = strLastName;
        return this;
    }


    //some other stuff
}  

Затем я инициирую объект с:

User testUser1 = new User()
                           .withFirstName("John")
                           .withLastName("Doe");

а потом я делаю с этим, что мне нужно.

P.S. Извините за то, что код не является синтаксисом Python ... но вы должны его получить

0 голосов
/ 01 марта 2011

Может быть, то, что вы ищете, это какая-то насмешливая структура.Затем, когда вы тестируете PaymentScreen, вы можете смоделировать Payer.Подробнее о фреймворках для Python смотрите здесь: Какая ваша любимая библиотека для Python? .

...