【问题标题】:Test driven development and interfaces测试驱动开发和接口
【发布时间】:2012-12-08 14:35:46
【问题描述】:

我将如何对接口进行单元测试,例如以下简单示例:

interface My_App_My_Interface
{
    /**
     * @return int
     */
    public function getInteger();

    /**
     * @return string
     */
    public function getString();
}

这将如何在我的应用程序测试目录中组织:

tests > My > App > My > InterfaceTest??

【问题讨论】:

  • 这个接口你要测试什么?

标签: php unit-testing testing phpunit


【解决方案1】:

您不测试接口。你测试实现。如果接口提供所有必需的功能,则应(由人工)检查接口

【讨论】:

  • 所以,如果我正在创建一个系统,通过实现接口来为第三方系统提供接口,那么我不会在我的代码中提供测试?
  • 接口无法测试,因为接口中没有代码。
  • 如果您提供的接口意味着两件事之一。您希望有人实现该接口,因为您将使用它。在这种情况下,您应该模拟此接口或创建测试实现并测试使用该接口的代码。第二种选择是:您提供接口(作为合同)和其他人将使用的实现。在这种情况下,您应该测试您的实现。不同的是提供文件。最好的方法是创建示例测试用例。但是仍然没有办法测试接口
  • @piotrek 写你的第二个选项,你为什么要提供接口和实现?仅提供实现还不够吗?当你说contract时,我没听懂你。
【解决方案2】:

正如 piotrek 所说,你永远不会测试接口,因为它们只是一个合约,里面没有代码。

例如,使用atoum testing framework,您可以编写一个实现您的接口的类。

namespace mageekguy\atoum\tests;

class TestMyInterfaceImplementation extends atoum\test{
    public function test__construct(){
        $object = new MyObject();
        $this->object($object)->instanceof('MyInterface');
    }
    public function test_getInteger(){
       $object = new MyObject();
        $this->integer($object->getInteger);
    }
 }

接口只提供抽象方法,无法实例化,无法编写测试。

【讨论】:

    猜你喜欢
    • 2010-11-21
    • 1970-01-01
    • 1970-01-01
    • 2011-09-09
    • 2012-10-10
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多