Искусственное создание ошибки тайм-аута соединения в.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.