如何在测试中创建测试对象?

时间:2011-03-01 15:39:02

标签: python unit-testing class-design

我正在为付款流程创建单元测试。大约有20个单元单元测试可以写出一些正面案例和一些负面案例。

示例:

payment_screen=PaymentScreen()

并且我很少有概念。

首先 - 使用赋予属性创建一个Payer对象:

payer=Payer(last_name,country_code)

country_code很重要,因为系统不允许将项目发送到其他国家/地区

第二

payer=Payer.return_correct_payer()

类似的东西:

班级付款人:

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

并在两个选项中

payment_screen.fill_payer_data(payer)

另一个概念:

pay_screen中的

只需创建两个方法:

fill_payer_data_with_correct_data()

fill_payer_data_with_uncorrect_data()

哪一个最好?或许你有另一个想法(我相信你有)

修改

感谢您的回复,但这不是我需要的。 我只是不希望在给出属性的每个测试用例中创建对象Pax。

我有20个测试用例,所以现在我必须写20次:

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

我不想复制我的代码

2 个答案:

答案 0 :(得分:0)

也许您正在寻找的是某种嘲弄框架。然后,当您测试PaymentScreen时,您可以模拟Payer。有关python的模拟框架的更多信息,请查看:What is your favorite Python mocking library?

答案 1 :(得分:0)

嘿。
可能首先回答mocks是你需要的,但我想展示我在测试中如何创建对象。 因此,如果我需要一个具有给定参数的对象,我使用BuilderPattern(实际上是从GOF修改了BuilderPattern),如下所示:

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语法...但你应该得到它