【问题标题】:Automated testing with PHP使用 PHP 进行自动化测试
【发布时间】:2010-10-11 17:14:51
【问题描述】:

我是一名 .net 开发人员,请原谅我对 PHP 一无所知。我在网上阅读了一些东西,但我无法说出它与 Asp.net MVC 在自动化测试方面的比较。

我倾向于认为 PHP 与经典 ASP 非常相似,只是它是 OOP(是吗?)。为了提高它的可测试性,你必须遵循某些开发模式和代码风格来提供 SoC(类似于 Asp.net WebForm,你必须做 MVP,但你距离 Asp.net MVC 给你的东西还有光年开箱即用)。

所以。 PHP 在编写自动化测试方面与 Asp.net MVC 相比如何(当然最值得注意的是单元测试)?我必须使用某些库吗?我是否必须遵循某些规则/模式才能使其发挥作用?

持续集成怎么样?测试也可以在那里自动运行吗?

【问题讨论】:

    标签: php asp.net-mvc comparison automated-tests


    【解决方案1】:

    根据具体情况,我使用了三个:SimpleTest、PHPUnit 和 Zend_Test(它实际上只是 PHPUnit 与 Zend 框架一起使用的包装器)。其中,SimpleTest 确实更容易。然而,PHPUnit 提供了强大的功能和灵活性。

    【讨论】:

    • 所以基本上你的意思是:如果你想做单元测试,你必须自己处理 SoC(当然还有 IoC,通常在其他任何地方),然后使用一些单元测试库+ 单独的测试运行器来实现它?是这样吗?
    • @Robert 测试应该如何处理 SoC(假设关注点分离)?这不是与测试无关的编程问题吗?
    • @ircmaxell:测试不考虑 SoC。应用程序框架在 Asp.net MVC 中执行。在 PHP 中,您可能必须自己手动处理或使用我想的一些库(类似于将 MVVM Prizm 框架与 Silverlight 一起使用)。然而,SoC 是提高可测试性的必要部分。
    • @Robert:相信我,我明白 SoC 的重要性。我不理解的是框架(应用程序或测试)如何为您“照顾 SOC”。当然,它可以通过推动您遵循分离关注点的约定(如 MVC 所做的那样)来提供帮助,但最终取决于您来进行分离。我不确定图书馆将如何为您做这件事(无论如何,只有 PHP 或 ASP)。如果您需要一个架构框架来引导您走上这条路,有tons for PHP。但这不是为你做的......
    • 我不知道您对 Asp.net MVC 框架有多熟悉,但是开发人员编写代码的方式迫使您将每个功能单元分开。控制器是不访问任何视图元素的简单类。他们只是为他们提供数据并返回一个视图。框架在内部执行视图渲染(并将数据刷新到其中)。另一方面,模型也与控制器分离(更不用说视图)。所以 SoC 本质上是由项目结构所强制的。你当然要照顾 IoC,但 SoC 是你不必考虑太多的东西。
    【解决方案2】:

    我不是 .net 开发人员,因此无法比较两者,但我可以帮助填补关于 PHP 的一些空白。

    首先,虽然 PHP 确实像您习惯的那样支持类和 OOP,但这不是必需的。事实上,一些基于 PHP 的项目(例如 Drupal)中几乎没有 OO 代码。

    至于测试 PHP 代码,您可能希望使用 PHPUnit。它实现了the xUnit system 用于在 PHP 中测试代码。但是,如果您不喜欢 PHPUnit,那么您可能需要查看 SimpleTest,这是一个稍微不同的 PHP 测试框架。

    【讨论】:

    • 所以,如果你根本不做 OOP,你就会陷入单元测试的重重摇滚。
    • 不一定。没有理由你不能编写代码来使用 PHPUnit 来测试只是一堆函数的代码。但它确实使设置/拆卸更具挑战性,因为在 OO 环境中,创建新对象应该(理论上)让您从头开始。
    • 对。基本上,即使没有任何模式(如 MVP),您也可以对标准的 Asp.net webforms 应用程序进行单元测试,但您会遇到很多工作和麻烦。这里类似。谢谢(你的)信息。 +1
    【解决方案3】:

    php 无法与 asp.net mvc 相比,因为 php 是一种类似于 c# 的语言 它们都有 OO,您可以像在 asp.net 中一样测试方法和类

    就像在 asp.net 中一样,您在 php 中也有一个 mvc。你可能想看看一些框架,比如 Symfony,它们在相同的 mvc 模型上工作。

    .net 中的测试是使用 NUnit 或其他方式完成的,在 PHP 中你有一些类似的,比如 PHPUnit,在 Symfony 中也有 Lime。

    实际上,我正处于从 php 到现在在 c# 开发中的相反情况,这几乎都是一样的......

    测试可以自动运行,在 .net 中你可能知道 nant(自动测试和构建工具),ant 对于 php/java 和 hudson 是一样的,作为一个工具来获取所有构建的概览。

    【讨论】:

    • 好吧,我一定在某种程度上不同意你的观点。 PHP 是一种语言。的确。但它也是一个网络平台。另一方面,C# 不是。 Asp.net MVC 是一个平台,但不是一种语言。所以。我知道可用于任何 Web 平台的库的浪费选择来执行 MVC/MVVM/MVP 模式。但我想没有其他平台可以像 Asp.net MVC 那样执行 SoC。你不能这样做。所以隐含的SoC可以这么说。在其他平台上,您始终可以随心所欲。与 Asp.net WebForms 相同。
    • 我也承认我的问题不是以最好的方式写的。但现在改变它为时已晚,因为它会自动丢弃你所有的答案。感谢您提供意见。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 2012-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多