log4net nie rzucać wyjątki: http://logging.apache.org/log4net/release/faq.html
piśmie do dziennika na dysku lub w bazie danych w badanej jednostki jest przeciwny do zamierzonego; chodzi o automatyzację. Nie powinieneś sprawdzać dzienników przy każdym uruchomieniu testów.
Jeśli naprawdę potrzebujesz sprawdzić, czy wykonano połączenie, aby się zalogować, powinieneś wyśmiewać interfejs ILog
i potwierdzić, że została wywołana odpowiednia metoda.
Jeśli używasz szyderczego schematu, jest to banalne. Jeśli nie, możesz utworzyć klasę TestLogger
, która implementuje lub częściowo implementuje ILog
i ujawnia dodatkowe właściwości, które pokazują, ile razy dana metoda została wywołana. Twoje asercje sprawdzą, czy metody zostały wywołane zgodnie z oczekiwaniami.
Oto przykład klasy należy testowany:
public class MyComponent
{
private readonly ILog _log;
public MyComponent(ILog log)
{
_log = log;
}
public string DoSomething(int arg)
{
_log.InfoFormat("Argument was [{0}]", arg);
return arg.ToString();
}
}
i test (stosując Rhino.Mocks do mock Ilog)
[TestClass]
public class MyComponentTests
{
[TestMethod]
public void DoSomethingTest()
{
var logger = MockRepository.GenerateStub<ILog>();
var component = new MyComponent(logger);
var result = component.DoSomething(8);
Assert.AreEqual("8", result);
logger.AssertWasCalled(l => l.InfoFormat(Arg<string>.Is.Anything, Arg<int>.Is.Equal(8)));
}
}
Po prostu zgaduję, ale czy w pliku app.config dodano niezbędne informacje konfiguracyjne log4net do projektu testu jednostkowego? – rsbarro