Fitnesse with.NET在运行套件时神秘地卡住了

Fitnesse with.NET在运行套件时神秘地卡住了,.net,fitnesse,.net,Fitnesse,(当然,我可以说这是“神秘的”,因为我还不能确定这个问题。我希望这对你们中的一位博学的读者来说是显而易见的,并且你们可以启发我:-) 在我的浏览器(FireFox或IE)中运行一个fitnesse测试可以很好地工作,但是当我运行一套测试或一套套件时,fitnesse只是在开始后不久就停止了。它从不报告测试完成情况;它只是挂着 我在Windows XP上运行fitnesse,代码库为.NET 3.5。我首先用诊断代码检测fitnesse测试和fitnesse夹具,试图确定是否确实是fitnesse

(当然,我可以说这是“神秘的”,因为我还不能确定这个问题。我希望这对你们中的一位博学的读者来说是显而易见的,并且你们可以启发我:-)

在我的浏览器(FireFox或IE)中运行一个fitnesse测试可以很好地工作,但是当我运行一套测试或一套套件时,fitnesse只是在开始后不久就停止了。它从不报告测试完成情况;它只是挂着

我在Windows XP上运行fitnesse,代码库为.NET 3.5。我首先用诊断代码检测fitnesse测试和fitnesse夹具,试图确定是否确实是fitnesse锁定或(更有可能)夹具访问了我的代码库,从而解决了这个问题。所以我创建了一些诊断例程,写入日志文件,告诉我何时进入和离开每个fitnesse夹具。如果日志文件最后一次报告一个“enter”,表示代码库中卡住了;如果日志最后报告了指向fitnesse的“离开”。诊断非常简单,需要手动检测每个夹具——观察
诊断。输入
诊断。将
方法保留在下面的框架代码中。(如果出现异常,
Leave
方法的参数允许我查看异常的文本。)

在对同一测试套件进行了一系列试验后,我注意到了两个惊人的观察结果:

  • 从浏览器运行时,fitnesse输出滞后于测试进度,并且(在此锁定场景中)永远赶不上进度。也就是说,在浏览器中,我可以看到执行了一到十几个测试表。另一方面,日志文件显示了大约35个相同执行的测试表。我怀疑这个延迟与锁定无关,因为网页在锁定发生之前很久就停止更新,日志文件继续报告正在执行的测试表

  • 锁定发生在随机位置。下面我粗略的条形图显示了近十几次试验(每行一次),时间(或测试表的数量)在水平轴上。每个“X”代表一个已处理的测试表

    1> XXXXXXXXXXXXXXXXXXXXXXXXXXXX
    2> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    3> XXXXXXXXXXXXXXXXXXXXXXXXXX
    4> XXXXXXXXXXXXXXXXXXXXXXXXXXXX
    5> XXXXXXXXXXXXXXXXXXXXXXXXX
    6> XXXXXXXXXXXXXXXXXXXXXXXXXXXX
    7> XXXXXXXXXXXXXXXXXXXXXXXXXXXX
    8> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    9> XXXXXXXXXXXXXXXXXXXXXXXXX
    A> XXXXXXXXXXXXXXXXXXXXXXXXX
    B> XXXXXXXXXXXXXXXXXXXXXXXXX

  • 无一例外,每一次输入都被日志中的一次休假所平衡。这表明问题在于fitnesse,而不是测试中的代码。然而,它确实依赖于两个重要的假设:第一,每个测试夹具都是插装的,第二,在每个插装的测试夹具中,只有琐碎的代码在Enter-Leave括号之外(例如,像return语句只返回局部值或变量声明带有简单或没有初始化值)。我还没有完全审查这两个假设,但我认为它们会被证明是正确的

  • 我曾希望fitnesse提供自己的日志记录,以便我可以看到,例如,哪个设置或SuiteSetUp被继承,何时处理Include,哪个测试表正在运行,等等。然而,从我所看到的情况来看,fitnesse唯一的日志记录功能报告了整个测试页面的粒度,这是不幸的

    奇怪的是,我自己的网络搜索结果中完全没有提到其他人在fitnesse中遇到这个问题,这当然强烈暗示了问题在我的代码库中

    任何关于隔离此问题的建议,无论是在fitnesse中还是在我的代码库中,都将不胜感激


    2010.07.15更新

    奇怪的是,我想我解决了这个问题。通过将fitnesse使用的端口从(我认为是)默认的8080更改为不太流行的端口号,现在我可以毫无问题地运行测试套件或套件套件。我确实检查了端口8080(使用TCPView)上是否没有其他运行。那么有没有人想到为什么这会有什么不同呢?

    试试这个


    看看是否有未处理的异常发生。

    我知道这是一个老问题,但我想我会为未来的观众添加这个问题

    我们在运行套件时遇到了问题,结果是新安装的Trend Micro反病毒软件(或者他们称之为“无忧业务安全”)

    “URL过滤”功能就是这个套件的一部分


    您有类似的跑步记录吗?

    您使用的是什么版本的FitNesse?在一些FitNesse版本中存在计时问题-一些已经修复。您的可能已修复-或者您可能已发现一个新的:(Mike,我应该包括这个细节:我正在运行最新和最棒的v20100303。Mike,我似乎没有标准的fitsharp安装。我从未在C:\Program文件中安装过任何东西;相反,我只是从Subversion下载了我组的fitnesse目录,并使用运行的run.bat文件调用fitnesse服务器。)“java-jar fitnesse.jar…”。我有一个包含TestRunner.exe的dotnet目录,但它与我的目录非常接近。此外,我的根fitnesse页面包含以下定义:!define TEST_RUNNER{dotnet\FitServer.exe}好的,您有旧的FitNesse.NET实现。有一个更新的实现:请参阅,但我认为这不会解决您的问题,因为与FitNesse通信的FitServer协议代码没有更改。我在IE中遇到了相同的问题,使用chrome无需担心。
    public class AddFoobarEntityFixture : ColumnFixture
    {
        public bool Ok()
        {
            Diagnostic.Enter();
            string exitMessage = null;
            try
            {
                . . .
            }
            catch (Exception exc)
            {
                exitMessage = exc.Message;
                return false;
            }
            finally
            {
                Diagnostic.Leave(exitMessage);
            }
            return true;
        }
    }