Хотите обойти Microsoft.Practices.EnterpriseLibrary.Logging в тесте MOQ
Я хочу протестировать свой код, который зависит от регистрации в Microsoft, и я хочу, чтобы он издевался или проходил мимо. в этом методе я проверяю ввод.
ниже приведена ошибка "LogWriter не был установлен для статического класса Logger. Установите его, вызывая метод Logger.SetLogWriter". Мой код, как показано ниже.
public HttpResponseMessage Patch(long Id)
{
using (new Tracer(GetType().Namespace))
{
EnterpriseHeader entHeader = Request.GetEnterpriseHeaders();
Request.LogApiRequestReceived(_logger, entHeader, GetType().Name);
Request.VerifyIdFormat((ulong)CustomerId);
_bussinessObject.PatchData(Id, entHeader);
return Request.CreateResponse(HttpStatusCode.OK);
}
}
В методе Mocking я пишу код ниже. Ilogger - наш пользовательский регистратор, который я могу смоделировать, но "New Tracer(Gettype().NameSpace)" не умеет издеваться.
var mocklogger = new Mock<ILogger>();
var mockTracer = new Mock<ITracer>();
mockTracer.Setup(x => x.Tracer(GetType().Namespace));
var Controller = new Controller(mockBO.Object, mocklogger.Object);
Controller.Request = AddHttpRequestForHeaders();
var Results = Controller.GetById(1517, true, false);
теперь я хочу издеваться над Tracer в Moq.
Если я смоделирую вышеприведенный код в Moq, он выдаст мне ошибку, т. Е. "Дополнительная информация: недопустимая установка для не виртуального (переопределяемого в VB) члена: mock => mock.GetType()"
и мой код в Moq
var mockTracer = new Mock<Tracer>();
mockTracer.Setup(x => x.GetType().Namespace);
Спасибо,
1 ответ
Иногда лучше не использовать макет для создания макета. Особенно синглтон-персоналу сложно издеваться. В этом случае вам, вероятно, следует просто настроить журнал, чтобы он ничего не делал. Этот вид двойного теста называется поддельным: https://www.martinfowler.com/bliki/TestDouble.html
См. Эту статью для создания поддельного LogWriter: https://martinwilley.com/net/code/entliblognoconfig.html