MachineSpecs 단위 테스트 도퍼

c# dapper

문제

그래서 Dapper는 확장 메소드를 사용하기 때문에 필자가 필요로했던 함수를 싸서 작성했습니다.

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") 시도해 dynParams.Get<string>("param1") 하고, 먼저 읽어야하는 다른 게시물을 읽으십시오.

DapperWrapper 클래스에 DynamicParamters 를 캡슐화하고 Dictionary<string, object> 통과 DapperWrapper 작업을 수행했지만이 증가 코드는 수행하지 않았습니다. DapperWrapper 에서 테스트 할 수없는 코드의 양이 증가하여 이상적이지 않습니다.

이 사양이 실행되지 않는다는 사실을 무시하십시오. 의도적으로 축소되었습니다.

인기 답변

나는 당신 말 들었어. 나는 같은 문제에 직면 해 있으며 DynamicParameters (IEnumerable> 사용)를 사용하거나 사용자가 수행 한 작업을 포기해야합니다. 심지어 모의 단위 테스트에서 인수를 캡처하는 일종의 콜백을해야합니다. Dapper 팀에 매개 변수 개인 사전 개체에 대한 액세스를 허용하거나 입력 매개 변수 이름과 값을 볼 수있는 추가 메서드를 제공하라는 요청을 제출했습니다.



아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow
아래 라이선스: CC-BY-SA with attribution
와 제휴하지 않음 Stack Overflow