Testowanie klas z użyciem mocków

Założenie: Nauczymy się, jak testować klasę `Zamowienie`, która zależy od klasy `Platnosc`, używając mocka dla klasy `Platnosc`.

Krok po kroku:

  1. Stworzenie klasy `Platnosc` (dla uproszczenia):
  2. 
    
    				

    Ta klasa symuluje przetwarzanie płatności. W rzeczywistości mogłaby zawierać złożoną logikę.

  3. Stworzenie klasy `Zamowienie`:
  4. 
    platnosc = $platnosc;
        }
    
        public function zlozZamowienie($kwota) {
            if ($this->platnosc->przetworzPlatnosc($kwota)) {
                return "Zamówienie złożone!";
            } else {
                return "Błąd podczas przetwarzania płatności.";
            }
        }
    }
    ?>
    				

    Klasa `Zamowienie` korzysta z obiektu `Platnosc` do przetworzenia płatności.

  5. Testowanie klasy `Zamowienie` z użyciem mocka:
  6. 
    mockPlatnosc = $this->createMock(Platnosc::class);
        }
    
        public function testZlozZamowieniePowodzenie() {
            $this->mockPlatnosc->method('przetworzPlatnosc')->willReturn(true);
            $zamowienie = new Zamowienie($this->mockPlatnosc);
            $this->assertEquals("Zamówienie złożone!", $zamowienie->zlozZamowienie(100));
        }
    
        public function testZlozZamowienieBlad() {
            $this->mockPlatnosc->method('przetworzPlatnosc')->willReturn(false);
            $zamowienie = new Zamowienie($this->mockPlatnosc);
            $this->assertEquals("Błąd podczas przetwarzania płatności.", $zamowienie->zlozZamowienie(100));
        }
    }
    ?>
    				

    W tym teście używamy `PHPUnit` do stworzenia mocka klasy `Platnosc`. Metoda `przetworzPlatnosc` jest “zmockowana” – zwraca `true` lub `false` w zależności od testu. Dzięki temu możemy testować klasę `Zamowienie` niezależnie od rzeczywistego działania klasy `Platnosc`.

Ten przykład pokazuje podstawy testowania klas z użyciem mocków w PHP. Zachęcamy do dalszego zgłębiania tematu testów jednostkowych i frameworków testowych takich jak PHPUnit.

Dodaj komentarz 0

Your email address will not be published. Required fields are marked *