Ncrunch Все тестовые пропускания первого запуска, но не удается после изменения кода, и при запуске все кнопки нажата

StackOverflow https://stackoverflow.com//questions/12685690

  •  12-12-2019
  •  | 
  •  

Вопрос

Я запускаю Ncrunch, в новом решении MVC 4 в VS2012 с использованием NUNIT и NINJECT.

Когда я впервые открою решение все 50 или так, чтобы пройти тест и пройти успешно.

После того, как я сделаю все изменения кода (даже просто добавленное пустое пространство) NCRUNC сообщает, что большинство моих тестовых устройств отключается. То же самое происходит, если я нажимаю «Выполнить все тесты» в окне Ncrunch.

Но если вы нажмете кнопку «Запустить все тесты, здесь» все 50 тестовых проходов снова и сообщает Ncrunch, все в порядке.

Также, когда вы запускаете каждый тест индивидуально проходят каждый раз.

Когда они не пройдут, они, кажется, не могут в моем коде настройки Ninject

ОШИБКА: TESTFIXTURESETUP не удалось в ControlertestSetUp

public class ControllerTestSetup
{

    [SetUp]
    public void InitIntegrationTest()
    {
        var context = IntegrationTestContext.Instance;
        context.Init();
        context.NinjectKernel.Load<MediGapWebTestModule>();
    }

    [TearDown]
    public void DisposeIntegrationTest()
    {
        IntegrationTestContext.Instance.Dispose();
    }
}

public class IntegrationTestContext : IDisposable
{  

    private static IntegrationTestContext _instance = null;
    private static readonly object _monitor = new object();

    private IntegrationTestContext() { }

    public static IntegrationTestContext Instance
    {
        get
        {
            if (_instance == null)
            {
                lock (_monitor)
                {
                    if (_instance == null)
                    {
                        _instance = new IntegrationTestContext();
                    }
                }
            }

            return _instance;
        }
    }
}
.

Весь тест также работает в тестовом пробеге в Reasharper без проблем каждый раз.

кто-нибудь знает, что может вызвать это?

Я предполагаю, что это что-то связано с кодом блокировки Singleton внутри свойства экземпляра, но я не уверен.

===============================================================================. Прогресс:

Я смог отследить это до ошибки в методе настройки Ninject выше, упаковывая его в попытку выясните, и запись ошибки в окно вывода.

Исключение было вызвано, пытаясь загрузить модуль более одного раза, даже у меня определенно нет, и я не использую ни одного типа автоматического модуля загрузки.

Это происходит по линиям

LocalSessionFactoryModule.SetMappingAssemblies(() => new[] { typeof(ProviderMap).Assembly });

_kernel.Load<LocalSessionFactoryModule>();
_sessionFactory = _kernel.Get<ISessionFactory>();
.

Где localsessionfactoryModule - это класс модуля Ninject, полученный для класса NinjectModule.

Почему это происходит только с Ncrunch и что я могу сделать, чтобы решить эту проблему? Есть ли способ проверить, был ли модуль уже загружен?

Это было полезно?

Решение

NCRUNCH никогда не будет выполнять тесты параллелизма в том же процессе, поэтому, если у вас нет многопоточного поведения внутри вашей тестовой логики, то должно быть безопасно, чтобы сказать, что это не проблема, вызванная блокировкой или резьбой над синглтоном ,

Как вы уже пытались отключить параллельное исполнение, и это не имеет значения, я предполагаю, что проблема не будет вызвана одновременным использованием ресурсов вне процесса тестового бегуна (то есть файлов на диске).

Это означает, что проблема почти наверняка связана с последовательностью, в которой выполняются тесты. Почти все ручные тестовые бегуны (включая Resharper) запускают тесты в определенной последовательности от начала до конца. Это хорошо для консистенции, но он может маскировать проблемы, которые могут быть поверхностными, когда тесты работают в непоследовательном / случайном порядке. Ncrunch выполнит тесты в порядке приоритета, а также могут повторно использовать тестовые процессы между тестовыми прогорами, которые могут сделать поведение времени выполнения ваших тестов, если они не были разработаны с этим в виду.

Полезный способ на поверхность (и, следовательно, отладки), связанные с последовательностью, связанные с последовательностью, чтобы попытаться выполнить тесты в порядке, определенном вручную, используя NCRUNC. Если вы щелкните правой кнопкой мыши тест внутри окна тестов NCRUNCH, в разделе «Расширенное» меню вы найдете возможность выполнения теста с использованием существующего процесса бегуна задач. Попробуйте это действие против нескольких ваших тестов, чтобы увидеть, сможете ли вы воспроизвести последовательность, которая нарушает проблему. Когда это произойдет, вы должны легко получить отладчик на тест и узнать, почему он не удается.

Большая часть проблем, связанных с последовательностью, вызвана неповрежденными статическими элементами, поэтому убедитесь, что каждый из ваших тестов написан в предположении, что существующее состояние может оставить позади другого теста, который был запущен в процессе. Другой вариант состоит в том, чтобы все состояние полностью очищено тестами на разрывах (хотя на мой взгляд, это часто менее прагматичный подход).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top