我即將鑽研PHP世界中的測試,我有一些問題。我有一個處理貸款申請的控制器。然後將大部分工作委託給ProcessLoanApplication類。如何在Symfony中爲此編寫測試?
ApplyController
class ApplyController extends Controller
{
public function indexAction(Request $request)
{
$form = $this->createForm(new LoanApplication());
if($request->getMethod() == 'POST') {
$form->bind($request);
if($form->isValid()) {
$session = $this->getRequest()->getSession();
$loan_app_processor = new Tasks\ProcessLoanApplication($form, $session);
$loan_app_processor->process();
return $this->redirect($this->generateUrl('apply_thanks'));
}
}
任務\ ProcessLoanApplication
class ProcessLoanApplication
{
private $_QuickBaseModels;
private $_session;
private $_app; // submitted form data
private $_existingApp = false; // holds existing application in QB, if it exists
public function __construct(Form $form, Session $session)
{
$this->_app = $form->getNormData();
$this->_session = $session;
// save the form data to a session
$session->set('application', $this->_app);
// create the quickbase table models objects
$this->_QuickBaseModels['GenFnHome\Application'] = new GenFnHome\Application();
$this->_QuickBaseModels['GenFnHome\SSN'] = new GenFnHome\SSN();
}
public function process()
{
$this->_existingApp = $this->_getExistingApplication();
$app_status = $this->_existingApp[GenFnHome\SSN::LogInApplicationStatus];
if(!$this->_existingApp || ($this->_existingApp && ($app_status !== 'PENDING' && $app_status !== 'OPEN' && $app_status !== 'EXPIRED')))
return $this->_saveNewLoanApplication();
if($app_status == 'EXPIRED') $this->_reOpenApplication();
}
有很多怎麼回事,所以我會先勾勒它:
- 用戶發出請求爲應用程序
- 申請表進行驗證
- 如果有效,處理貸款申請
- 檢查,如果用戶已經有一個應用程序,如果是這樣 - 做X,如果不是ÿ
- 該應用程序是在「在線數據庫」堅持(QuickBase)我的應用程序通過HTTP上的XML通信(換句話說,沒有真正的DB)
我的問題給社會:
- 這裏應該測試什麼?我知道這在很大程度上取決於我,但是社區可能會推薦一些應該寫入的基線測試。我應該測試控制器,處理器類和QuickBase類嗎?
- 我的測試應該是彼此獨立的 - 也就是說,我應該單獨測試每個組件,而不是讓一個大型testApplication執行indexAction所做的所有操作,只查找預期的會話變量集。
- 最後,一個測試API如何在沒有實際請求的情況下調用(請求/響應)(我正在使用PHPUnit)。
- 還有什麼我應該知道的?
謝謝!