我正在编写另一个PHP框架,现在我编写了很多东西,我开始考虑单元测试(是的,我知道,形式不好)。
某些操作使框架修改HTTP行为,例如创建cookie,重定向浏览器。另一个主要特性是访问的URI可能会影响框架的行为方式。
简而言之,我需要能够测试影响环境或受环境影响的东西,而不仅仅是函数/方法的返回值。我怎么能这么做最简单?
答案 0 :(得分:4)
SimpleTest的Web Tester可能会对您有所帮助。
答案 1 :(得分:2)
简而言之,我需要能够测试影响环境或受环境影响的东西,而不仅仅是函数/方法的返回值。我怎么能这么做最简单?
如果可以轻松模拟环境并且可以使用少量状态完全表示,那么您应该查看模拟测试。模拟测试可以帮助您编写测试,而不必使用真正的域对象,只要确保以正确的顺序调用事物即可。这是原则的 a good overview 。
如果情况并非如此,那么您所说的是集成测试,这要贵得多。集成测试可帮助您查看系统是否具有内聚性,并且通常使用应用程序的实时,完整堆栈副本运行。这是关于集成测试的some more reading。
答案 2 :(得分:1)
答案 3 :(得分:0)
听起来好像你正在编写集成测试而不是单元测试(根据定义,任何触及环境的东西都是集成测试)。
通过浏览器更容易通过堆栈进行测试吗?如果是这样,请查看浏览器自动化框架,可能类似于http://wtr.rubyforge.org/
答案 4 :(得分:0)
(是的,我知道,形式不好)。
是。如果您已经开始使用这些测试,那么您可能会以某种方式编写框架,以便可以模拟外部依赖项。您现在可以做的是通过调用全局代理对象来替换对操作全局状态的函数的所有调用。然后你可以在测试期间模拟它。全局状态的一个特别麻烦的变化是调用exit
/ die
。您可以尝试在模拟中使用异常替换它。