【问题标题】:Fitnesse with .NET gets mysteriously stuck when running suitesFitnesse with .NET 在运行套件时神秘地卡住了
【发布时间】:2013-11-20 16:55:34
【问题描述】:

(当然我可以说这是“神秘的”,因为我无法确定问题所在。我希望你们中的一位博学的读者会明白这一点,并且您能启发我 :-)

在我的浏览器(FireFox 或 IE)中运行单个 Fitnesse 测试可以正常工作,但是当我运行一组测试或一组套件时,Fitnesse 在开始后很快就会停止。它从不报告测试完成;它只是挂起。

我在 Windows XP 上针对 .NET 3.5 代码库运行 Fitnesse。我首先通过使用诊断代码对 Fitnesse 测试和 Fitnesse 固定装置进行检测来解决该问题,以尝试确定它是否确实是 Fitnesse 锁定或(更有可能)我的代码库被固定装置访问。因此,我创建了一些诊断程序,这些程序写入日志文件,以告诉我何时进入和离开每个健身装置。如果日志文件最后报告一个“进入”,表明卡在代码库中;如果日志最后报告了指向健身的“离开”。诊断非常简单,需要手动检测每个夹具——观察下面骨架代码中的Diagnostic.EnterDiagnostic.Leave 方法。 (Leave 方法的参数让我看到异常的文本,如果发生了。)

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;
    }
}

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

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

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

    1> XXXXXXXXXXXXXXXXXXXXXXXX
    2> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    3> XXXXXXXXXXXXXXXXXXXXXX
    4> XXXXXXXXXXXXXXXXXXXXXXXX
    5> XXXXXXXXXXXXXXXXXXXXXXXX
    6> XXXXXXXXXXXXXXXXXXXXXXXX
    7> XXXXXXXXXXXXXXXXXXXXXXXX
    8> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
    9> XXXXXXXXXXXXXXXXXXXXXXXX
    A> XXXXXXXXXXXXXXXXXXXXXXXX
    B> XXXXXXXXXXXXXXXXXXXXXXXX

  3. 无一例外,每个 Enter 都由日志中的 Leave 平衡。这表明问题出在fitnesse而不是被测代码上。然而,它确实依赖于两个重要的假设:首先,每个测试夹具都被检测,其次,在每个检测的测试夹具中,只有微不足道的代码在 Enter-Leave 括号之外(例如,像 return 语句只返回本地值或具有简单或没有初始化值的变量声明)。我还没有完全审查这两个假设,但我认为它们会被证明是可以的。

我曾希望 Fitnesse 提供自己的日志记录,这样我就可以看到,例如,哪个 SetUp 或 SuiteSetUp 被继承,何时处理包含,正在运行哪个测试表等。然而,根据我所看到的, Fitnesse 的日志记录功能仅报告整个测试页面的粒度,这是不幸的。

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

感谢您提出任何隔离此问题的建议,无论是在fitnesse 中还是在我的代码库中!


2010.07.15 更新

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

【问题讨论】:

  • 您运行的是哪个版本的 FitNesse?在某些 FitNesse 版本中存在时间问题 - 有些已得到修复。你的可能已经修复了——或者你可能发现了一个新的:(
  • 我应该包括那个细节,迈克:我正在运行最新最好的 v20100303。

标签: .net fitnesse


【解决方案1】:

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

我们在运行套件时遇到问题,结果证明是新安装的趋势科技防病毒软件(或者他们称之为“企业安全无忧”)。

“URL 过滤”功能是该套件的一部分。

你有类似的跑步吗?

【讨论】:

  • 我在浏览 IE 时遇到了同样的问题,不用担心使用 chrome。
【解决方案2】:

试试这个

http://www.asoftwarecraft.com/2010/01/troubleshooting-with-fitsharp-and.html

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

【讨论】:

  • 迈克,我似乎没有标准的 fitsharp 安装。我从未在 C:\Program Files 中安装过任何东西;相反,我只是从 Subversion 下载了我组的 Fitnesse 目录,并使用运行“java -jar Fitnesse.jar ...”的 run.bat 文件调用 Fitnesse 服务器。我有一个包含 TestRunner.exe 的 dotnet 目录,但这与我得到的一样接近。此外,我的根 Fitnesse 页面包含以下定义: !define TEST_RUNNER {dotnet\FitServer.exe}
  • 好的,你有旧的 FitNesse.NET 实现。有一个更新的实现:请参阅syterra.com/FitSharp.html,但我认为这不会解决您的问题,因为与 FitNesse 通信的 FitServer 协议代码没有改变。
猜你喜欢
  • 2019-12-19
  • 1970-01-01
  • 1970-01-01
  • 2021-10-26
  • 2018-03-21
  • 1970-01-01
  • 2015-05-15
  • 2022-01-18
  • 1970-01-01
相关资源
最近更新 更多