Тестирование на мертвую блокировку с nUnit

Вы можете просматривать таблицы и выполнять

mysqldump -uroot -p db_name table_name --where='id=22'

или использовать

SELECT * INTO OUTFILE 'data_path.sql' from table where id=22
.
6
задан xyz 23 January 2009 в 12:25
поделиться

5 ответов

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

NUnit ничего не делает с потоками. Вы могли записать тесты, которые запускают несколько потоков и затем тестируют их взаимодействие. Но они начали бы больше походить на интеграционные тесты, чем модульные тесты.

Другая проблема состоит в том, что поведение мертвой блокировки обычно зависит от потоков порядка, планируются в. Таким образом, было бы трудно записать окончательный тест для тестирования определенной проблемы мертвой блокировки, потому что Вы не имеете никакого контроля над планированием потоков, это сделано ОС. Вы могли закончить с тестами, которые иногда перестали работать на многоядерных процессорах, но всегда успешно выполняются на ядерных процессорах.

5
ответ дан 8 December 2019 в 04:56
поделиться

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

[TestFixture]
public class DeadlockTests
{
    [Test]
    public void TestForDeadlock()
    {
        Thread thread = new Thread(ThreadFunction);
        thread.Start();
        if (!thread.Join(5000))
        {
            Assert.Fail("Deadlock detected");
        }
    }

    private void ThreadFunction()
    {
        // do something that causes a deadlock here
        Thread.Sleep(10000);
    }
}

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

7
ответ дан 8 December 2019 в 04:56
поделиться

Обнаружение мертвой блокировки эквивалентно проблеме остановки и поэтому в настоящее время не разрешимо в общем случае.

Если у Вас есть определенная проблема для принятия мер, могли бы быть определенные взломы для получения, по крайней мере, капельки безопасности. Знайте, хотя, что это может только быть взломом и никогда 100%. Например, такой тест мог бы всегда передавать машину разработки, но никогда на производственной машине.

5
ответ дан 8 December 2019 в 04:56
поделиться

Смотрите на Microsoft Project под названием "Шахматы". Это разработано для нахождения, согласился ошибки http://research.microsoft.com/en-us/projects/chess/

4
ответ дан 8 December 2019 в 04:56
поделиться

Для тестирования на мертвую блокировку необходимо реализовать граф состояния и проверку на циклы в графике текущего состояния в модульном тесте. Граф состояния состоит из ресурсов как узлы и зависимости как края. Я понятия не имею о реализации такой вещи, но это - теория.

Модульный тест тестирует на правильность в и вывод данных (главным образом для более поздней точки) а не для правильности потока выполнения Вашего приложения.

Идея Mark Heath кажется разумной, но является академически неправильной.

3
ответ дан 8 December 2019 в 04:56
поделиться
Другие вопросы по тегам:

Похожие вопросы: