创建cffile action = upload将处理的模拟请求

rip*_*747 4 coldfusion unit-testing

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

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

我在在线ColdFusion帮助中看到了一个使用cfhttp创建这样一个请求的例子,但是它必须发布到另一个页面,这会破坏整个目的.

mar*_*her 5

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

在这种情况下,我建议不测试上传.我相信我们不应该花时间测试那些不是我们代码的东西.我们捕获一个错误或其他怪异的可能性对我来说足够低,无法证明它是未经测试的.但我相信我们应该测试"我们的"代码.

在您的方案中,您有两种行为:1)上载和2)上传后行为.我会测试上传后的行为.

现在,这可以使您的单元测试无需关心文件的来源.请注意这实际上是如何导致上传逻辑与"我该如何处理文件?"​​的解耦.逻辑.总而言之,这至少创造了(理论上)将这种上传后逻辑重用于上传之外的其他东西的潜力.

这样可以使您的测试更容易,因为现在您可以测试一些放在单元测试本身的setUp中的文件.

所以你的组件会改变

<cfffunction name="uploadAndDoStuff">
Run Code Online (Sandbox Code Playgroud)

 <cffunction name="upload">  
Run Code Online (Sandbox Code Playgroud)

然后

<cffunction name="handleUpload"> 
Run Code Online (Sandbox Code Playgroud)

或"handleFile"或"doSomethingWithFile"或"processNetworkFile"或其他一些东西.在你的单元测试中,你不需要测试upload(),只测试你的上传后处理程序.例如,如果我在工作中做这个,我的要求是:"上传文件;将文件排队进行病毒扫描;创建缩略图,如果图片或JPG;添加东西的数据库,等等",然后我会保持每个那些作为单独的函数的步骤,我将隔离测试它们,因为我知道"上传文件"已经有效,因为它从CF1.0(或其他)开始工作.合理?

更好的是,完全将"上传"保留在组件之外.将它保存在CFM文件中并没有错,因为在尝试对它进行泛化时,我认为没有太多意义(据我所知).在模拟方面可能会有好处,但这完全是一个不同的主题.