【问题标题】:How can Java from Kent Beck's book TDD by example be represented in PHP?Kent Beck 的书 TDD 中的 Java 如何用 PHP 表示?
【发布时间】:2013-04-22 02:40:40
【问题描述】:

我正在自学 PHP 以及 TDD(使用 PHP 和 PHPUnit)。我正在阅读 Kent Beck 的《Test-driven Development by Example》一书。

例如,在第 3 章中,他为相等性测试提出了以​​下建议:

public void testEquality() {
    assertTrue(new Dollar(5).equals(new Dollar(5)));
}

在 Dollar 类中,他重写了 equals 方法:

public boolean equals(Object object) {
   Dollar dollar = (Dollar) object;
   return amount == dollar.amount;
}

我是 PHP 新手,这可能没有帮助,但我不知道如何将其翻译成 PHP。

对于我尝试的第一个功能:

public function testEquality(){
    $a = new Dollar(5);
    $this->assertTrue($a->equals($b = new Dollar(5)));
}

这是正确的轨道吗?据我所知,现在必须将对象分配给一个变量,对吗?在那条路线之前我探索过

$this->assertTrue(new Dollar(5)->equals(new Dollar(5))); 

引发语法错误。然而,令人惊讶的是,通过 $this->assertEquals(new Dollar(10), $five->times(2)); 重构了早期的 testMultiplication 方法。

equals 方法而言,这对我来说完全陌生,我只是不知道从哪里开始。

如何在 PHP 中正确重构上述内容?如果我能做对一些,我想我可以处理其余的例子。

作为一个附带问题,有没有人知道这个 Money 示例是否已经在 PHP 中处理过并且代码在那里?

【问题讨论】:

  • 就等号而言,我不知道如何阅读它,然后用 PHP 重写它。 Dollar dollar = (Dollar) object 这实际上是在说什么?在这里,对于 PHP,我会创建一个美元对象,然后将其与参数中传递的对象进行比较吗?像 $d = new Dollar(); is_object($object)? 2个问题,我的美元构造函数需要整数,我可以判断参数是否是一个对象,但不能判断它是美元类型。另外,将 (Dollar) 转换为 Java 我不知道在 PHP 中该怎么做。

标签: java php unit-testing tdd phpunit


【解决方案1】:

你的代码如下

public boolean equals(Object object) {
   Dollar dollar = (Dollar) object;
   return amount == dollar.amount;
}

这意味着(一行一行)

  1. 定义一个名为equals 的新方法,该方法将返回truefalse,并期望Object 类型的对象(在Java 中表示每个对象)作为参数
  2. Object类型的对象转换为Dollar(wiki on type conversion)类型,现在你可以使用这个对象的公共方法和属性了
  3. 比较当前上下文中的属性amount 与来自dollar 的属性(来自object

您现在可以将方法逐行翻译为 PHP without the need of typecasting

public function equals($object)
{
    return $this->amount == $object->amount;
}

可以使用不同的方法声明:

public function equals(Dollar $object)

这样您就可以确保只比较相同类型的两个对象。

用法也和Java类似:

$a = new Dollar(5);
$b = new Dollar(5);
if ($a->equals($b))
    print "TRUE";
else
    print "FALSE";

要了解有关 PHP 中对象比较的更多信息,您最好阅读manual

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2020-11-30
    • 2010-10-24
    • 1970-01-01
    • 2011-09-21
    • 1970-01-01
    • 2017-12-29
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多