Как обмануть context.Database.ExecuteSqlCommand (sqlinsertquery, params) метод с использованием Xunit и Moq? [Дубликат]

вы можете использовать

$('.buttons').on('click', 'button', function(){
    // your magic goes here
});

или

$('.buttons').delegate('button', 'click', function() {
    // your magic goes here
});

, эти два метода эквивалентны, но имеют другой порядок параметров.

см .: Событие делегата jQuery

1
задан Nkosi 7 March 2017 в 13:42
поделиться

1 ответ

Ни один из классов в примере не является 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>();
1
ответ дан Nkosi 19 August 2018 в 11:45
поделиться
Другие вопросы по тегам:

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