Дразнить TraceListener с Moq - PullRequest
       13

Дразнить TraceListener с Moq

4 голосов
/ 22 января 2011

Почему Moq Verify терпит неудачу с «Moq.MockException: не был выполнен вызов по макету»?

var mock = new Mock<TraceListener>();
var ts = new TraceSource("traceSourceName", SourceLevels.Verbose);
ts.Listeners.Add(mock.Object);

var message = "the message";

ts.TraceEvent(TraceEventType.Verbose, 0, message);
ts.Flush();
mock.Verify(x => x.WriteLine(message));

Ответы [ 2 ]

5 голосов
/ 26 марта 2013

Я знаю, что этот вопрос был здесь долгое время, однако ответ таков ...

Когда вы пишете событие трассировки через TraceSource, он вызывает метод TraceEvent ваших слушателей трассировки для выполнения трассировки - поэтому вам нужно проверять вызовы к listener.TraceEvent, а не listener.WriteLine ...

var mock = new Mock<TraceListener>();
var ts = new TraceSource("traceSourceName", SourceLevels.Verbose);
ts.Listeners.Add(mock.Object);

var message = "the message";

ts.TraceEvent(TraceEventType.Verbose, 0, message);

mock.Verify(x => x.TraceEvent(It.IsAny<TraceEventCache>(), "traceSourceName", 
    TraceEventType.Verbose, 0, message), Times.Once(), "Expected a trace");

Надеюсь, это кому-нибудь поможет!

Приветствия

Morgan

0 голосов
/ 19 февраля 2011

Тест утверждает, что метод WriteLine должен быть вызван, но это не так. Глядя на код, это, скорее всего, потому что этот тест выявил ошибку в вашем TraceSource.TraceEvent или TraceSource.Flush методе. Дважды проверьте эти методы, и вы должны быть хорошими, чтобы пойти!

Также см. этот вопрос .

...