Coldfusion 如何在cfwheels中对重定向进行单元测试

Coldfusion 如何在cfwheels中对重定向进行单元测试,coldfusion,cfwheels,Coldfusion,Cfwheels,对执行重定向的控制器操作进行单元测试的正确方法是什么 更新:我是CFWheels项目的核心开发人员。我问这个问题的全部原因是,目前我正在致力于增强我们现有的内置测试框架,我想知道如何在CFWheels中实现类似的东西,使开发人员能够更轻松地测试他们的应用程序 更新:我想出了如何测试这个。似乎我们必须重写一点wheels控制器的内部结构,以便在操作完成并传递回调度程序后执行重定向。这种方法唯一的一点是,在redirectTo()之后的任何代码都将被运行,除非您事先采取了适当的预防措施;这包括在re

对执行重定向的控制器操作进行单元测试的正确方法是什么

更新:我是CFWheels项目的核心开发人员。我问这个问题的全部原因是,目前我正在致力于增强我们现有的内置测试框架,我想知道如何在CFWheels中实现类似的东西,使开发人员能够更轻松地测试他们的应用程序


更新:我想出了如何测试这个。似乎我们必须重写一点wheels控制器的内部结构,以便在操作完成并传递回调度程序后执行重定向。这种方法唯一的一点是,在redirectTo()之后的任何代码都将被运行,除非您事先采取了适当的预防措施;这包括在redirectTo()语句之后放置一个返回,或者在操作中放置条件检查,以将redirectTo()代码与其他代码隔离。它还包括确保在执行redirectTo()后不会呈现任何其他内容。

您可以使用重定向设置为false的cfhttp调用具有适当URL的控制器。然后测试生成的cfhttpresult结构,它应该有重定向将带您去哪里的信息

如果将重定向机制分解为多个函数,那么这样的东西就更容易测试:a)确定目标URL的函数和b)执行重定向的函数

这样,您就可以非常轻松地测试functionA,而functionA正是您想要测试的。这是你写的代码。这才是你真正的逻辑所在。FunctionB不是您的代码;这是ColdFusion的胆量,测试CFD位置没有多大意义

如果您正在执行某项任务以实现100%的测试覆盖率,那么您可以对functionA进行10次测试,在测试中使用所有不同的逻辑分支,然后对functionB进行一次测试,以Terry建议的方式执行重定向;因此,通过这种方式,您只得到1个慢速测试,而不是10个


您可以将此方法推广到其他场景中:文件系统、Web服务、http、ftp、电子邮件等:“从无法控制和不想测试的内容中提取您可以控制和想要测试的内容”

我通常只对模型进行单元测试,而不是对控制器进行单元测试。“你使用哪种MVC框架?”亨利,我更新了这个问题来回答你的问题:PYou可能会考虑把这个问题的标题改成“如何进行单元测试重定向”或“如何在CFWELS中重定向单元测试”。这些短语更有可能与用户在搜索引擎中的搜索查询相匹配,这意味着此页面有更大的机会显示为顶级结果。这将意味着你有更多的代表性,更少地寻找有相同问题的人。这正是我目前正试图做的。最新版本的wheels是否包含这些更改?我发现这种方法的唯一问题是测试可能运行得非常慢。如果我不必发出http请求,那就更好了。我考虑的一种方法是在测试期间使用带有redirectTo()的应用程序变量返回arguments struct并绕过cflocation。我唯一的问题是,如果redirectTo()之后有其他可能运行的逻辑,会发生什么情况。我认为,如果您的控制器执行的重定向对单元测试来说耗时太长,则会出现一些问题,除非我误解了您的做法。在这种情况下,在cfhttp上设置一个超时,如果超时时间过长,则会失败。