(当然我可以说这是“神秘的”,因为我无法确定问题。我希望你们其中一位博学的读者能够明白这一点,你们可以开导我:-)
在我的浏览器(FireFox或IE)中运行单个fitnesse测试工作正常,但是当我运行一套测试或一套套件时,Fitnesse在开始后很快停在某个地方。它从未报告测试完成;它只是挂起。
我在Windows XP上针对.NET 3.5代码库运行fitnesse。我首先通过检测fitnesse测试和带有诊断代码的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> XXXXXXXXXXXXXXXXXXXXXXX
2 - ; XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
3 GT; XXXXXXXXXXXXXXXXXXXXXX
4> XXXXXXXXXXXXXXXXXXXXXXX
5个XXXXXXXXXXXXXXXXXXXXXXXX
6个XXXXXXXXXXXXXXXXXXXXXXX
7个XXXXXXXXXXXXXXXXXXXXXXX
8是氢。 XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
9个XXXXXXXXXXXXXXXXXXXXXXXX
A> XXXXXXXXXXXXXXXXXXXXXXXX
B个XXXXXXXXXXXXXXXXXXXXXXXX
毫无例外地,每个Enter都在日志中以Leave 进行平衡。这表明问题在于fitnesse而不是被测试的代码。然而,它确实依赖于两个重要的假设:首先,每个测试夹具都经过检测,其次,在每个检测的测试夹具中,只有简单的代码在Enter-Leave包围之外(例如返回声明仅返回本地值或具有简单或无初始化值的变量声明)。我还没有完全审查这两个假设,但我认为它们会证明没问题。
我曾希望fitnesse提供自己的日志记录,所以我可以看到,例如,继承了哪些SetUp或SuiteSetUp,何时处理包含,正在运行哪个测试表等等。但是,从我所看到的,然而,只有fitnesse的日志记录能力才能报告整个测试页面的粒度,这是不幸的。
奇怪的是,我自己的网络搜索完全没有提到其他人遇到fitnesse这个问题,当然,强烈暗示问题在于我的代码库不知何故。
任何有关隔离此问题的建议,无论是在fitnesse还是在我的代码库中,都表示赞赏!
2010.07.15更新
奇怪的是,我认为我解决了这个问题。通过将fitnesse使用的端口(我认为是)默认的8080更改为不太受欢迎的端口号,现在我可以毫无问题地运行测试套件或套件套件。我确实检查到我没有在端口8080上运行任何其他东西(使用TCPView)。所以任何人都有任何想法为什么会有所作为?
答案 0 :(得分:0)
答案 1 :(得分:0)
我知道这是一个老问题,但我想我会为未来的观众添加这个。
我们在运行套件时遇到问题,结果证明是新安装的趋势科技防病毒软件(或者称之为“企业安全无忧版”)。
这个套件的一部分是“URL过滤”功能。
你有类似的跑步吗?