XUnit, RhinoMocks или TestDriven.Net Проблема
Возникли некоторые проблемы, связанные с созданием экземпляров классов и TestDriven.Net(v4.0.3478) или XUnit(v2.2.0), RhinoMocks(v3.6.1) и structuremap.automocking(v4.0.0.315).
Учитывая этот код:
public class Tests1
{
[Fact]
public void passing_test()
{
var mocker = new RhinoAutoMocker<Subject>();
mocker.Get<IData>().Stub(x => x.Strings).Return(new List<string> {""});
var result = mocker.ClassUnderTest.GetStrings();
result.Count().ShouldEqual(1);
}
}
public class Tests2
{
[Fact]
public void passing_test()
{
var mocker = new RhinoAutoMocker<Subject>();
mocker.Get<IData>().Stub(x => x.Strings).Return(new List<string> {""});
var result = mocker.ClassUnderTest.GetStrings();
result.Count().ShouldEqual(1);
}
}
public class Subject
{
private readonly IData _data;
public Subject(IData data)
{
_data = data;
}
public IEnumerable<string> GetStrings()
{
return _data.Strings;
}
}
public interface IData
{
IEnumerable<string> Strings { get; set; }
}
Все тесты работают нормально, когда я щелкаю правой кнопкой мыши -> Run Test(s)
на конкретный метод тестирования или конкретное определение класса.
Тесты не выполняются, когда я щелкаю правой кнопкой мыши по проекту, папке, содержащей тесты, или по определению пространства имен вышеупомянутого класса.
Ошибки NullReferenceException
, когда делает утверждения, это, кажется, данные заглушки. Это случайно, иногда Tests1.passing_test
иногда терпит неудачу Tests2.passing_test
выходит из строя. Никогда оба.
Думая, что это должно с RhinoAutoMocker
и / или MockRepository
не сбрасывается между тестовыми приборами?
ОБНОВЛЕНИЕ: упрощенный код, чтобы показать проблему, также данный код завершен, используя NUnit [Test]
вместо XUnit [Fact]
Атрибуты работают, все ведет себя как обычно.
1 ответ
В вашем примере у вас есть два отдельных тестовых класса. По умолчанию xUnit v2 будет выполнять эти тесты параллельно.
Я столкнулся с той же проблемой, но в моем случае я использовал статический MockRepository.GenerateMock. Статический класс, используемый в параллельных тестах, приводит к исключениям. Кажущаяся случайность неудачных тестов зависит от того, какие тесты выполняются первыми.
Я вижу две альтернативы. 1. Тесты в одном классе - не совсем работоспособны. 2. Используйте атрибут XUnit Collection, чтобы поместить все классы тестов в одну коллекцию - это сработало для меня.
см.: http://xunit.github.io/docs/running-tests-in-parallel.html
Другой вариант - отключить параллелизм для xUnit, используя следующий атрибут в тестовой сборке.
[assembly: CollectionBehavior(DisableTestParallelization = true)]