вы можете использовать
$('.buttons').on('click', 'button', function(){
// your magic goes here
});
или
$('.buttons').delegate('button', 'click', function() {
// your magic goes here
});
, эти два метода эквивалентны, но имеют другой порядок параметров.
см .: Событие делегата jQuery
Ни один из классов в примере не является mockable с moq, поскольку они являются конкретными классами, и рассматриваемые методы не являются виртуальными. Чтобы сделать его более удобным для тестирования, отрисуйте эти классы за абстракциями, которыми вы управляете. Попробуйте не смешивать интерфейсы и классы, которые вы не контролируете.
Приведенный выше пример по-прежнему тесно связан с проблемами реализации DbRawSqlQuery<T>
. отделите его от конкреций и полагайтесь на абстракции IEnumerable<T>
.
public interface IExecuteSql {
int ExecuteSqlCommand(string sql, params object[] parameters);
IEnumerable<TElement> SqlQuery<TElement>(string sql, params object[] parameters);
}
public interface IUnitOfWork : IExecuteSql, //...other interfaces
{
//...other code removed for brevity
}
Реализации будут завершать конкреции
public class EntityFrameworkUnitOfWork : IUnitOfWork {
//...other code removed for brevity
public int ExecuteSqlCommand(string sql, params object[] parameters) {
return context.Database.ExecuteSqlCommand(sql, parameters);
}
public IEnumerable<TElement> SqlQuery<TElement>(string sql, params object[] parameters) {
return context.Database.SqlQuery<TElement>(sql, parameters);
}
}
. Так что теперь, когда тестирование IUnitOfWork
может быть легко издевательствовался с вашей издевательской каркасом выбора.
var mock = new Mock<IUnitOfWork>();