如何在测试中创建测试对象?
我正在为一个支付流程写单元测试。大约有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 模拟库是什么?。