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

0 投票
2 回答
579 浏览
提问于 2025-04-16 12:45

我正在为一个支付流程写单元测试。大约有20个单元测试要写,包括一些正面的案例和一些负面的案例。

举个例子:

payment_screen=PaymentScreen()

这里有几个概念。

首先 - 创建一个Payer对象,并给它一些属性:

payer=Payer(last_name,country_code)

国家代码很重要,因为系统不允许向其他国家发送物品。

第二

payer=Payer.return_correct_payer()

类似这样的:

class Payer:

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

在这两种情况下

payment_screen.fill_payer_data(payer)

还有另一个概念:

在支付界面只需创建两个方法:

fill_payer_data_with_correct_data()

fill_payer_data_with_uncorrect_data()

哪个更好呢?或者你们有没有其他的想法(我相信你们一定有)

编辑

谢谢你们的回复,但这不是我需要的。 我只是不想在每个测试案例中都创建一个Pax对象并给它属性。

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

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

我不想重复我的代码。

2 个回答

0

嘿,
你可能首先需要用模拟对象来回答问题,但我想给你展示一下我是如何在测试中创建对象的。
所以如果我需要一个带有特定参数的对象,我会使用建造者模式(其实是对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");

接着,我就可以对这个对象进行我需要的操作了。

附注:抱歉代码不是Python语法……不过你应该能理解的

0

也许你在寻找一种“模拟框架”。这样在测试 PaymentScreen 时,你可以把 Payer 模拟出来。想了解更多关于 Python 的模拟框架,可以看看这里:你最喜欢的 Python 模拟库是什么?

撰写回答