Искусственное создание ошибки тайм-аута соединения в.net

Я использую asp.net MVC Framework и EntityFramework для подключения к базе данных. Иногда при подключении к базе данных возникает ошибка тайм-аута. Эти ошибки очень редки.

System.Data.Entity.Infrastructure.DbUpdateException:
 An error occurred while updating the entries. See the inner exception for details. ---> System.Data.UpdateException: An error occurred while updating the entries. 
See the inner exception for details. ---> System.Data.SqlClient.SqlException:
Timeout expired. The timeout period elapsed prior to 
completion of the operation or the server is not responding.

var myList = new List<MyConnection>();
using (var db = new MyDb())
            {
                var activeConns = db.Connections
                                    .Where(c => c.Key == tKey)
                                    .Where(c => c.IsActive)
                                    .ToList();
                if (activeConns.Count > 0)
                {
                    //Some custom logic
         myList.add(conn);
                }

            return myList;
        }

Я не устанавливаю период ожидания соединения. Есть ли лучшая практика при работе с Entity Framework?

Как я могу создать такой дефект искусственно, чтобы я мог протестировать наше программное обеспечение?

2 ответа

Возможно, вам потребуется использовать Reflection, чтобы вызвать исключение времени ожидания SQL. Проверьте эту статью для справки: http://blog.developers.ba/post/2009/03/08/SqlException-class-doesnt-have-public-constructor.aspx

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

С точки зрения клиента, поддельный ведет себя так же, но у нас больше контроля над поведением для тестирования таких вещей, как ошибки (например, выдает ошибку тайм-аута в 5-м запросе).

Mocking Entity Framework Context - это еще один вопрос SO, в котором более подробно рассказывается о том, как его настроить, особенно для EntityFramework.

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