Ответ 1
Следуя инструкциям в этом обсуждении xUnit, похоже, что вам нужно реализовать конструктор на Fixture, а также реализовать IDisposable. Здесь полный образец, который ведет себя так, как вы хотите:
using System;
using System.Diagnostics;
using Xunit;
using Xunit.Sdk;
namespace xUnitSample
{
public class SomeFixture : IDisposable
{
public SomeFixture()
{
Console.WriteLine("SomeFixture ctor: This should only be run once");
}
public void SomeMethod()
{
Console.WriteLine("SomeFixture::SomeMethod()");
}
public void Dispose()
{
Console.WriteLine("SomeFixture: Disposing SomeFixture");
}
}
public class TestSample : IUseFixture<SomeFixture>, IDisposable
{
public void SetFixture(SomeFixture data)
{
Console.WriteLine("TestSample::SetFixture(): Calling SomeMethod");
data.SomeMethod();
}
public TestSample()
{
Console.WriteLine("This should be run once before every test " + DateTime.Now.Ticks);
}
[Fact]
public void Test1()
{
Console.WriteLine("This is test one.");
}
[Fact]
public void Test2()
{
Console.WriteLine("This is test two.");
}
public void Dispose()
{
Console.WriteLine("Disposing");
}
}
}
При запуске этого из консольного бегуна вы увидите следующий вывод:
D:\xUnit > xunit.console.clr4.exe test.dll/html foo.htm xUnit.net консольный тестовый бегун (64-разрядный .NET 4.0.30319.17929) Авторское право (C) 2007-11 Корпорация Microsoft.
xunit.dll: Версия 1.9.1.1600 Тестовая сборка: test.dll
SomeFixture ctor: это нужно запускать только один раз
Тесты завершены: 2 из 2
SomeFixture: Disposing SomeFixture
2 всего, 0 не удалось, 0 пропущено, заняло 0,686 секунды
Затем, когда вы вскрываете тестовый выходной файл foo.htm, вы увидите другой тестовый результат.