как удалить другие блоки

PHPMD говорит мне, что я должен избегать блокирования else в этом тесте, но в этом случае я не могу найти способ удалить их.

Вот код:

if ($fight->c1 == NULL) {
if ($fight->c2 == NULL) {
// C1 and C2 Is Bye
$this->assertEquals($parentFight->$toUpdate, NULL);
}
else {
// C1 Is Bye
$this->assertEquals($parentFight->$toUpdate, $fight->c2);
}
}
else {
if ($fight->c2 == NULL) {
// C2 Is Bye
$this->assertEquals($parentFight->$toUpdate, $fight->c1);
}
else {
// C1 and C2 Are all set
$this->assertEquals($parentFight->$toUpdate, NULL);
}
}

Любая идея???

0

Решение

Это также можно сделать с помощью троичного оператора, что-то вроде этого.

if (!$fight->c1) {
$this->assertEquals($parentFight->$toUpdate, ($fight->c2 ?: null));
}

if (!$fight->c2) {
$this->assertEquals($parentFight->$toUpdate, ($fight->c2 ?: null));
}
1

Другие решения

Есть еще один способ сделать это:

if(($fight->c1 == null && $fight->c2 == null) || ($fight->c1 != null && $fight->c2 != null)) {
// C1 and C2 Is Bye
// C1 and C2 Are all set
$this->assertEquals($parentFight->$toUpdate, null);
} else if($fight->c1 == null && $fight->c2 != null) {
// C1 Is Bye
$this->assertEquals($parentFight->$toUpdate, $fight->c2);
} else if($fight->c1 != null && $fight->c2 == null) {
// C2 Is Bye
$this->assertEquals($parentFight->$toUpdate, $fight->c1);
}
1

$checkValue = null;
$cntNulls = (int)is_null($fight->c1) + (int)is_null($fight->c2);
if ($cntNulls === 1) {
$checkValue = is_null($fight->c1) ? $fight->c2 : $fight->c1;
}

$this->assertEquals($parentFight->$toUpdate, $checkValue);
1

Похоже когда $fight->c1 не nullхочешь пройти $fight->c1, И когда $fight->c2 не nullхочешь пройти $fight->c2, И когда оба null ты хочешь пройти null,

Что бы вы просто сделали,

$param = null;
if($fight->c1 != null)
{
$param = $fight->c1;
}
if($fight->c2 != null)
{
$param = $fight->c2;
}

$this->assertEquals($parentFight->$toUpdate, $param);

Но я бы сделал еще один шаг и описал бы $param разрешить процесс, как,

private function relolveParam($fight) {
$param = null;
if($fight->c1 != null)
{
$param = $fight->c1;
}
if($fight->c2 != null)
{
$param = $fight->c2;
}
return $param;
}

Тогда вы только в конечном итоге,

$this->assertEquals($parentFight->$toUpdate, $this->relolveParam($fight));
1

использование else if а не несколько if...else

if ($fight->c1 == null && $fight->c2 == null) {
// C1 and C2 Is Bye
$this->assertEquals($parentFight->$toUpdate, null);
} else if($fight->c1 == null &&  $fight->c2 != null) {
// C1 Is Bye
$this->assertEquals($parentFight->$toUpdate, $fight->c2);
} else if($fight->c1 != null &&  $fight->c2 == null) {
// C2 Is Bye
$this->assertEquals($parentFight->$toUpdate, $fight->c1);
} else {
// C1 and C2 Are all set
$this->assertEquals($parentFight->$toUpdate, null);
}
0

Вы можете использовать два if{} вместо if{}else{} как это,

if(a){
//do a
}else{
//do !a
}

if(a){
//do a
}
if(!a){
//do !a
}
0

Вы также можете сделать один тест для каждого из случаев, для которых вы тестируете, имея 4 четких теста вместо одного теста, когда неясно, как тестируются все пути.

0
По вопросам рекламы [email protected]