(当然我可以说这是“神秘的”,因为我无法确定问题所在。我希望你们中的一位博学的读者会明白这一点,并且你能启发我:-)
在我的浏览器(FireFox 或 IE)中运行单个 Fitnesse 测试可以正常工作,但是当我运行一组测试或一组套件时,Fitnesse 在开始后很快就会停止。它从不报告测试完成;它只是挂起。
我在 Windows XP 上针对 .NET 3.5 代码库运行 Fitnesse。我首先通过使用诊断代码对 Fitnesse 测试和 Fitnesse 固定装置进行检测来解决该问题,以尝试确定它是否确实是 Fitnesse 锁定或(更有可能)我的代码库被固定装置访问。因此,我创建了一些诊断程序,这些程序写入日志文件,以告诉我何时进入和离开每个健身装置。如果日志文件最后报告一个“进入”,表明卡在代码库中;如果日志最后报告了指向健身的“离开”。诊断非常简单,需要手动检测每个夹具——观察下面骨架代码中的Diagnostic.Enter
和Diagnostic.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;
}
}
在对同一个测试套件进行了一系列试验后,我注意到了一些令人吃惊的观察结果:
从浏览器运行,fitnesse 输出滞后于测试进程,并且(在这种锁定场景中)永远不会赶上。也就是说,在浏览器中,我看到执行的测试表从一个到十几个不等。另一方面,日志文件显示了多达 35 个相同执行的测试表。我怀疑这种滞后与锁定无关,因为网页在锁定发生之前很久就停止更新,日志文件继续报告正在执行的测试表。
锁定发生在随机位置。我下面的粗略条形图显示了近十二个试验(每行一个),时间(或测试表的数量)在水平轴上。每个“X”代表一个已处理的测试表。
1> XXXXXXXXXXXXXXXXXXXXXXXX
2> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3> XXXXXXXXXXXXXXXXXXXXXXXXX
4> XXXXXXXXXXXXXXXXXXXXXXXXXXX
5> XXXXXXXXXXXXXXXXXXXXXXXX
6> XXXXXXXXXXXXXXXXXXXXXXXXXX
7> XXXXXXXXXXXXXXXXXXXXXXXX
8> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX 9
> XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX无一例外,每个 Enter 都由日志中的 Leave 平衡。这表明问题出在fitnesse而不是被测代码上。然而,它确实依赖于两个重要的假设:首先,每个测试夹具都被检测,其次,在每个检测的测试夹具中,只有琐碎的代码在 Enter-Leave 括号之外(例如,返回语句仅返回本地值或具有简单或没有初始化值的变量声明)。我还没有完全审查这两个假设,但我认为它们会被证明是可以的。
我曾希望 Fitnesse 提供自己的日志记录,以便我可以看到,例如,继承了哪个 SetUp 或 SuiteSetUp、何时处理包含、正在运行哪个测试表等。然而,据我所知,唯一的日志记录功能的fitnesse 报告到整个测试页面的粒度,这是不幸的。
奇怪的是,我自己的网络搜索完全没有提到其他人遇到这个问题,当然,这强烈暗示问题出在我的代码库中。
任何隔离此问题的建议,无论是在健身还是在我的代码库中,都非常感谢!
2010.07.15 更新
奇怪的是,我想我解决了这个问题。通过将 Fitnesse 使用的端口从(我认为是)默认的 8080 更改为不太流行的端口号,现在我可以毫无问题地运行测试套件或套件套件。我确实检查了我在端口 8080 上没有运行其他任何东西(使用 TCPView)。所以有人对为什么这会有所作为有任何想法吗?