unit-testing - 创建一个 cffile action=upload 将处理的模拟请求

标签 unit-testing coldfusion

我正在为 ColdFusion of Wheels 编写上传功能完成后需要对其进行单元测试。但我遇到的问题是,我不知道如何在 ColdFusion 中创建可用于单元测试的模拟多部分表单帖子。

我希望能够做的是创建模拟请求,模拟正在上传的文件,然后 cffile 可以处理该文件,然后我可以进行检查。

我在online ColdFusion help看到的,使用 cfhttp 创建此类请求的示例,但是它必须发布到另一个页面,这违背了整个目的。

最佳答案

很好的问题撕裂。对于它的值(value),我为 MXUnit(编写了 eclipse 插件)做出了贡献,这个场景出现在我今年在 cfobjective 上做的关于编写更容易测试的代码的演示 ( http://mxunit.org/doc/zip/marc_esher_cfobjective_2009_designing_for_easy_testability.zip )。

在这种情况下,我建议不要测试上传。我相信我们不应该花时间测试不是我们代码的东西。我们发现错误或其他奇怪现象的可能性足够低,我可以证明不对其进行测试是合理的。但是,我相信我们应该测试“我们的”代码。

在您的场景中,您有两种行为:1)上传和 2)上传后行为。我会测试上传后的行为。

这现在可以让您的单元测试不再关心文件的来源。请注意这实际上如何导致上传逻辑与“我如何处理文件?”​​的分离。逻辑。得出的结论是,这至少创造了(理论上)将这种上传后逻辑重用于上传以外的内容的潜力。

这使您的测试更容易,因为现在您可以只针对放置在单元测试本身的 setUp 中某个位置的某个文件进行测试。

所以你的组件从

<cfffunction name="uploadAndDoStuff">


 <cffunction name="upload">  

进而
<cffunction name="handleUpload"> 

或“handleFile”或“doSomethingWithFile”或“processNetworkFile”或其他一些东西。在您的单元测试中,您不测试 upload() 并测试您的上传后处理程序。例如,如果我在工作中这样做,我的要求是:“上传文件;将文件移到队列以进行病毒扫描;如果是图像或 jpg,则创建缩略图;将内容添加到数据库;等等”那么我会保留每一个步骤作为单独的函数,我会单独测试它们,因为我知道“上传文件”已经工作,因为它自 CF1.0(或其他)开始工作。有道理?

更好的是,将“上传”完全排除在组件之外。将它保存在 CFM 文件中并没有错,因为尝试对其进行泛化并没有多大意义(据我所知)。在 mock 方面可能有好处,但这完全是一个不同的话题。

关于unit-testing - 创建一个 cffile action=upload 将处理的模拟请求,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1344430/

相关文章:

ms-access - (ColdFusion + Access) 数据库查询错误 "Too few parameters."

unit-testing - 如何使用 Rhino Mocks 的记录重播模式避免设置代码重复?

android - SQLiteCantOpenDatabaseException : unknown error (code 14): Could not open database (Only when unit testing the app)

ajax - 函数的参数是必需的,但未传入

web-services - 修改底层Web服务签名后如何回收ColdFusion Web服务

jquery - DataTables 选择数据库中的行更新日期

sql-server - 为什么某些字符没有从 CFQUERY 正确注入(inject) SQL Server?

c# - 创建或获取特定的 SPTimeZone 实例

c# - FakeItEasy 模拟对象修改方法

java - 摩基托 : How to Verify that a parameter is an Object with a specific parameter?