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)]

Другие вопросы по тегам