2015-01-21 12 views
1

以下是我的测试中,我使用运行py.test:如何删除py.test中的持久对象?

def test_config1(): 
    _config_file1 = "some_file_1.cfg" 
    sim1 = Simulator(_config_file1) 
    sim1.run() 
    assert sim1.a == 4 

def test_config2(): 
    _config_file2 = "some_file_2.cfg" 
    sim2 = Simulator(_config_file2) 
    sim2.run() 
    assert sim2.a == 14 

SIM1创建一些对象,其坚持的内存,即使SIM1超出范围和SIM2的模拟已经开始。如何确保在sim2启动之前删除这些对象。我曾尝试将测试放在不同的文件中,但我假设py.test在同一个进程中运行它们,因此sim1创建的这些对象会持续存在并导致sim2提供错误的结果。如果测试顺序颠倒了,sim2运行良好,但sim1不能。

一种方法是编写一个sim1的析构函数,删除它创建的所有对象。有没有其他的方法来删除py.test中的持久化对象?

回答

0

创建一个setUp()或tearDown()方法,在每次测试开始之前调用并删除持久对象。

+0

这似乎是一个很好的方法来删除该对象。一个切线问题是sim1中还有其他模块会创建sim1无法直接访问的对象。我总是可以转到那些单独的模块并删除这些对象。有没有一种直接的方式来摆脱sim1运行时创建的所有对象? – 2015-01-21 09:08:03

+1

很难从你的信息中知道,Afaik没有直接的方法去除所有的东西,但是对于单元测试来说,在所有的单元测试之间有相同的“状态”是很重要的......所以如果sim1不能删除它创建的对象,你需要调用其他类中的功能(如果可能)。 – 2015-01-21 10:25:54

+0

是的。对于所有的单元测试,添加到类中的通用函数应该比做这个更好。谢谢。 – 2015-01-21 10:51:22