I got a class Fight, which implements a logic of a fight between two heroes. After the fight one of the hero may lose some health points. i wrote a php Unit test but getting an error
TypeError: Argument 1 passed to Tests\Unit\Fight::makeFight() must implement interface Tests\Unit\HeroInterface, string given, called in location\ExampleTest.php on line 61
here is my code with classes and interface and the test method
interface HeroInterface
{
public function getForce(): int;
public function getImmunity(): int;
public function getHealthPoints(): int;
public function setHealthPoints(int $healthPoints);
}
class DamageHelper
{
const DAMAGE_RAND_FACTOR = 0.2;
public static function getDamage(HeroInterface $attacker, HeroInterface $defender)
{
if ($attacker->getForce() < $defender->getForce()) {
return 0;
}
$damageBase = round(($attacker->getForce() - $defender->getForce()) / $defender->getImmunity());
$damageFactor = $damageBase * self::DAMAGE_RAND_FACTOR;
$minDamage = $damageBase - $damageFactor;
$maxDamage = $damageBase + $damageFactor;
return mt_rand($minDamage, $maxDamage);
}
}
class Fight
{
public function makeFight(HeroInterface $attacker, HeroInterface $defender)
{
$damage = DamageHelper::getDamage($attacker, $defender);
$defender->setHealthPoints($defender->getHealthPoints()-$damage);
}
}
class ExampleTest extends TestCase
{
/**
* A basic test example.
*
* @return void
*/
public function testMakeFight()
{
$fight = new Fight();
$this->assertTrue($fight->makeFight('10', '2'));
}
}
any help will be appreciated
via Chebli Mohamed
Aucun commentaire:
Enregistrer un commentaire