我有一些使用xUnit和Watin的测试用例。为了使类中的所有Facts共享相同的IE实例,我创建了一个单例类,因此第一个测试将启动一个新的IE实例,以下测试将使用相同的实例。
完成所有事实后,IE实例仍在运行。我只是想知道如何在课堂上完成所有测试后关闭IE。
答案 0 :(得分:3)
为此,您的测试类需要实现IUserFixture接口
我将提供解决您需求的示例并演示xunit
生命周期模型:
public class MyTestClass : IUseFixture<WatinFixture>, IDisposable
{
private WatinFixture _data;
public void SetFixture(WatinFixture data)
{
_data = data;
Console.WriteLine("setting data for test");
}
public MyTestClass()
{
Console.WriteLine("in constructor of MyTestClass");
}
[Fact]
public void Fact1()
{
Console.WriteLine("in fact1. IE is '{0}'", _data.ReferenceToIE);
// use _data.ReferenceToIE here
}
[Fact]
public void Fact2()
{
Console.WriteLine("in fact2. IE is '{0}'", _data.ReferenceToIE);
// use _data.ReferenceToIE here
}
public void Dispose()
{
Console.WriteLine("in Dispose of MyTestClass");
}
}
public class WatinFixture : IDisposable
{
public string ReferenceToIE = null;
public WatinFixture()
{
// start IE here
Console.WriteLine("Starting IE ...");
ReferenceToIE = "If you see this string - then browser reference is not empty.";
}
public void Dispose()
{
// close IE here
Console.WriteLine("Closing IE ...");
ReferenceToIE = null;
}
}
输出:
启动IE ...
在MyTestClass的构造函数中 设置测试数据
事实上1。 IE是'如果你看到这个字符串 - 那么浏览器引用不是空的。' 在处理MyTestClass中 在MyTestClass的构造函数中 设置测试数据
事实上2。 IE是'如果你看到这个字符串 - 那么浏览器引用不是空的。' 在处理MyTestClass中 关闭IE ...