使用testbox和asyncAll启用Coldbox处理程序测试

时间:2017-09-22 10:00:40

标签: coldfusion integration-testing cfml cfc coldbox

TL;博士;有谁知道如何安全地使用testbox进行异步冷箱处理程序集成测试?

我正在使用coldbox 3.8.1.00076和testbox 1.1.0.00076并创建了一些类似于下面示例的集成测试,并使它们运行得更快,为它们启用了asyncAll,但似乎BaseTestCase执行方法不是线程安全并与cfc中的所有线程共享请求上下文(和控制器等),因此线程A(aTest)和线程B(bTest)有时可能最终返回完全相同的事件对象,该事件对象将包含任何线程的呈现结果最后完成... ish。

他们在docs中提到通过适当地确定它们所在的变量来确保测试是线程安全的,并且在他们的异步示例中他们重新加载wirebox但是由于线程问题来自共享冷箱对象我怀疑这会有所帮助,我已经尝试了以防万一,但它也打破了测试,因为示例似乎缺少使用现有映射配置线盒,但我没有打算如何做到这一点,因为我怀疑它会解决我的问题问题无论如何。

示例测试

component extends="coldbox.system.testing.BaseTestCase" asyncAll="true"{

    public function aTest() output="false"{
        var event = execute(event:"someHandler.a", renderResults: true);
        var cbox_rendered_content = event.getValue("cbox_rendered_content", "");
        $assert.includes(cbox_rendered_content, "SOME_UNIQUE_CONTENT_TO_A"); //fails here when b content is returned
    }

    public function bTest() output="false"{
        var event = execute(event:"someHandler.b", renderResults: true);
        var cbox_rendered_content = event.getValue("cbox_rendered_content", "");
        $assert.includes(cbox_rendered_content, "SOME_UNIQUE_CONTENT_TO_B"); //fails here when a content is returned
    }
}

示例亚军

<!--- Executes all tests in the 'specs' folder with simple reporter by default --->
<cfparam name="url.reporter"        default="simple">
<cfparam name="url.directory"       default="test.specs">
<cfparam name="url.recurse"         default="true" type="boolean">
<cfparam name="url.bundles"         default="">
<cfparam name="url.labels"          default="">
<cfparam name="url.reportpath"      default="#expandPath( "/test/results" )#">
<cfparam name="url.propertiesFilename"  default="TEST.properties">
<cfparam name="url.propertiesSummary"   default="false" type="boolean">

<!--- Include the TestBox HTML Runner --->
<cfinclude template="/coldbox/system/testing/runners/HTMLRunner.cfm" >

0 个答案:

没有答案