Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHPUnit] Testowanie metody, która ma referencję
wujek2009
post
Post #1





Grupa: Zarejestrowani
Postów: 350
Pomógł: 31
Dołączył: 23.05.2010

Ostrzeżenie: (0%)
-----


Hej,

Mam sytuację, w której jest metoda a jeden z jej argumentów idzie przez referencję. Mój problem polega na tym, że ta referencja zwraca IDki, które później są sprawdzane w innej metodzie (tej, która wywołała) czy IDki są w tablicy, jeśli tak to zwróć true. Poniżej przedstawiam schemat (nazwy klas, metod - zmyślone na potrzeby tematu, flow jest jednak ten sam):

  1. <?php
  2.  
  3. class Db
  4. {
  5. public function update($rows, &$success, &$error)
  6. {
  7. if ((..)) {
  8. $success[] = $this->getId();
  9. } else {
  10. $error[] = $this->getId();
  11. }
  12. }
  13. }
  14.  
  15. class Prepare
  16. {
  17. protected $db;
  18.  
  19. public function setDb($db)
  20. {
  21. // itd.
  22. }
  23.  
  24. public function make()
  25. {
  26. // $rows = (...) jakaś tam obróbka danych
  27. $success = array();
  28. $error = array();
  29.  
  30. $this->db->update($rows, $success, $error);
  31.  
  32. return ((count($success) > 0 AND count($error) == 0) ? true : false);
  33. }
  34. }
  35.  
  36. class TestPrepare extends PHPUnit_Framework_TestCas
  37. {
  38. public function testMakeMethod()
  39. {
  40. $mck = Mockery::mock();
  41. $mck->shouldReceive('update')
  42. ->with(
  43. ['id' => 51, 'name' => 'John', 'password' => 'Hour']
  44. // REFERENCE?
  45. // REFERENCE?
  46. )
  47. ->once()
  48. ->andReturn(true)
  49.  
  50. $prepare = new Prepare();
  51. $prepare->setDb($mck);
  52. $response = $prepare->make();
  53.  
  54. $this->assertTrue($response)
  55. }
  56. }


I teraz dla #44, #45 linijki nie wiem co mam wstawić, aby metoda, którą mockuje przekazywała w sobie też referencję z testowymi danymi, próbowałem coś w stylu:
  1. ->with(
  2. ['id' => 51, 'name' => 'John', 'password' => 'Hour']
  3. \Mockery::on(function(&$error) {
  4. $error = array();
  5.  
  6. return true;
  7. }),
  8. \Mockery::on(function(&$success) {
  9. $success[] = 51;
  10.  
  11. return true;
  12. }),
  13. )


ale to nie działa, ponieważ jak zrobię sobie:
  1. var_dump($success, $errors)


przed tym return w klasie: Prepare to cały czas mam pustą tablice - w ogóle nie dodało mojego "51" (jako ID) w konsekwencji mam, że test nie przeszedł. Ma ktoś jakiś pomysł?
Go to the top of the page
+Quote Post

Posty w temacie


Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 23.08.2025 - 13:01