Testing with Sessions ¶
Symfony is designed from the ground up with code-testability in mind. In order to test your code which utilizes sessions, we provide two separate mock storage mechanisms for both unit testing and functional testing.
Testing code using real sessions is tricky because PHP's workflow state is global and it is not possible to have multiple concurrent sessions in the same PHP process.
The mock storage engines simulate the PHP session workflow without actually starting one allowing you to test your code without complications. You may also run multiple instances in the same PHP process.
The mock storage drivers do not read or write the system globals
session_id()
or session_name()
. Methods are provided to simulate this if
required:
- getId(): Gets the
session ID.getId(): セッション ID を取得します。
- setId(): Sets the
session ID.setId(): セッション ID を設定します。
- getName(): Gets the
session name.getName(): セッション名を取得します。
- setName(): Sets the
session name.setName(): セッション名を設定します。
Unit Testing ¶
For unit testing where it is not necessary to persist the session, you should swap out the default storage engine with MockArraySessionStorage:
1 2 3 4 |
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\MockArraySessionStorage;
$session = new Session(new MockArraySessionStorage());
|
Functional Testing ¶
For functional testing where you may need to persist session data across separate PHP processes, change the storage engine to MockFileSessionStorage:
1 2 3 4 |
use Symfony\Component\HttpFoundation\Session\Session;
use Symfony\Component\HttpFoundation\Session\Storage\MockFileSessionStorage;
$session = new Session(new MockFileSessionStorage());
|