2010-05-18 77 views
4

我正在测试我的站点的身份验证功能。 Zend_Auth正在使用授权引擎。但验证状态仍然存在于测试之间,我需要在每一次tearDown中写出“注销”。在PHPUnit测试中隔离Zend_Session

现在一切都好。但问题在于。至于我知道Zend_Auth使用Zend_Session存储auth数据。所以,会话在所有测试中都很常见。我担心将来会导致问题。

你能告诉我什么是最好的做法,使每个测试会话隔离?

现在我可以想象只有在setUp中手动启动会话并在tearDown中停止。但是我有很多测试并且实现这可能需要很长时间。

回答

1

对于整个测试套件,PHPUnit允许您为define a shared fixture(常见设置)。然而,这个解决方案掩盖了测试设计中的一个缺陷,因为它没有解决他们对一个通用全局状态的依赖。更好的解决方案是use test doubles,创建某些类的自定义存根控制系统选定部分的行为。

在这种情况下,您可以尝试创建一个Zend_Auth的存根,以便它跳过Zend_Session的使用并返回每个单元测试所需的权限。

+0

但是在这两种情况下,我仍然需要对所有存在的测试进行更改。我正在寻找一些不这样做的方法。如果可能。 – darja 2010-05-19 02:55:59

+0

问题是:你能告诉我什么是最好的做法,使每个测试会话隔离?那么,这些是一些选择。另一方面,实现一个共享夹具并不需要做太多的改变,你只需要为所有那些需要会话认证的测试创建一个测试套件,然后把测试中的夹具移动到套件中的一个普通夹具上。 还有另外一个选项,它只是为了测试目的而创建一个Zend_Auth的模拟。那么这只是寻找和替换的问题。 – nuqqsa 2010-05-19 08:25:18

+0

您好,我想起了另一种可能适合您的方法(伪造用户身份),请参阅:http://stackoverflow.com/questions/2937387/is-there-any-way-to-force-authentication-与-的Zend-AUTH/2939327#2939327 – nuqqsa 2010-05-31 12:07:16