2015-04-23 5 views
0

Таким образом, потому что Щеголеватые используют методы расширения я завязал функцию мне нужно, чтобы я мог окурок его:MachineSpecs Модульного тестирования Щеголеватый

public interface IDapperWrapper 
{ 
    Task<IEnumerable<dynamic>> ExecuteQuery(string needArg, string sql, DynamicParameters parameterDictionary, CommandType commandType); 
} 

Я прошел в DynamicParameters так что это означает, что мой код создает эти затем переходит к DapperWrapper :)

Так что мой Specs файл выглядит что-то вроде:

public class MyUnitTest : WithSubject<ClassCallingDapperWrapper> 
{ 
    protected static DynamicParameters DynamicParameters; 

    private Establish context =() => 
    { 
     The<IDapperWrapper>() 
     .WhenToldTo(
      x => 
      x.ExecuteQuery(
       Param.IsAny<string>(), 
       Param.IsAny<string>(), 
       Param.IsAny<DynamicParameters>(), 
       Param.IsAny<CommandType>())) 
     .Return(
      (string org, string sql, DynamicParameters dynParm, CommandType cmdType) => 
      { 
       DynamicParameters = dynParm; 

       return Task.FromResult(response); 
      }); 
    } 

    private It should_call_dapper_with_correct_params =() => 
    { 
     DynamicParameters dynParams = new DynamicParameters(); 
     dynParams.Add("@param1", "123"); 

     The<IDapperWrapper>().WasToldTo(x => x.ExecuteQuery(
       NeededArg, 
       sql, 
       Params.Any<DynamicParameters>(), 
       CommandType.StoredProcedure)); 
    }; 

    // Here I want to check that the DynamicParameters static field has the same parameters as the one I passed through. 
} 

Так как я выполняю, что последний л ине. Я пробовал dynParams.Get<string>("param1"), но потом прочитал еще одно сообщение, в котором говорится, что вам нужно сначала прочитать.

Исполнив это инкапсуляцией DynamicParamters в DapperWrapper класса и проходя через Dictionary<string, object>, но не только делает это увеличение кода. Он также увеличивает количество не проверяемого кода в DapperWrapper, что не является идеальным.

игнорировать тот факт, что эта спецификация не будет работать - она ​​целенаправленно сократилась

ответ

0

Я тебя слышу. Я сталкиваюсь с теми же проблемами, и мне приходится либо отказаться от использования DynamicParameters (используйте IEnumerable>), либо сделать то, что вы сделали. Даже тогда в модульном тестировании с помощью mocks я должен сделать какой-то обратный вызов, чтобы захватить аргумент. Я отправил запрос команде Dapper, чтобы разрешить доступ к частному словарному объекту параметров или предоставить дополнительный метод, позволяющий нам просматривать имена и значения входных параметров.

Смежные вопросы