Implementazione di un'interfaccia di ILogger per registrare i dati

1

Ho bisogno di scrivere dati su file in una delle mie classi.

Ovviamente passerò un'interfaccia nella mia classe per disaccoppiarla.

Stavo pensando che questa interfaccia verrà utilizzata per i test e anche in altri progetti.

Questa è la mia interfaccia:

//This could be used by filesystem, webservice
public interface ILogger
{
   List<string> PreviousLogRecords {get;set;}
   void Log(string Data);
}

public interface IFileLogger : ILogger
{
  string FilePath;
  bool ValidFileName;
}

public class MyClassUnderTest
{
  public MyClassUnderTest(IFileLogger logger) {....}
}

[Test]
public void TestLogger()
{
   var mock = new Mock<IFileLogger>();
   mock.Setup(x => x.Log(Is.Any<string>).AddsDataToList()); //Is this possible??

   var myClass = new MyClassUnderTest(mock.Object);

   myClass.DoSomethingThatWillSplitThisAndLog3Times("1,2,3");

   Assert.AreEqual(3,mock.PreviousLogRecords.Count);

}

Questo non funzionerà Non credo che nulla stia memorizzando gli articoli, quindi è possibile usando Moq e anche cosa ne pensi del design dell'interfaccia?

    
posta Jon 21.03.2012 - 19:41
fonte

1 risposta

0

Bene, sto prendendo un po 'di pugnalata alla tua prima domanda qui, dato che non sono chiaro su cosa "AddsDataToList" significhi e il tuo codice non verrà compilato in entrambi i modi, ma sembra quello che stai cercando fare è usare la funzionalità di callback di Moq. Qualcosa sulla falsariga di:

mock.Setup(x => x.Log(Is.Any<string>()).Callback((string s) => mock.Object.PreviousLogRecords.Add(s));

Per quanto riguarda la progettazione del logger (e oltre al commento appropriato che esistono già molti logger), sembra abbastanza ragionevole, anche se personalmente mi piace evitare di esporre le collezioni come proprietà. Essendo la ragione, la sintassi della chiamata diventa una specie di Law-Of-Demeter-violation-ish.

logger.PreviousLogRecords.Count

o

if(logger.PreviousLogRecords[0].Equals("asdf"))

Ad ogni modo, al primo conteggio, se aggiorni un po 'il tuo post, posso probabilmente commentare in modo più specifico ciò che stai cercando di fare con Moq.

    
risposta data 21.03.2012 - 20:27
fonte

Leggi altre domande sui tag