Mam projekt testowy jednostki Visual Studio do testowania projektu ASP.NET MVC.MSTest - Jak zainicjować log4net dla projektu UnitTest?
Dodanie montażowej poziomie log4net.Config.XmlConfigurator
atrybutem AssemblyInfo.cs nie działa, a inni na SO odkryli oni muszą korzystać z bezpośredniego połączenia do log4net.Config.XmlConfigurator.Configure();
Chodzi o to, w jaki sposób można to zrobić dla test jednostkowy? Odpowiedź na użycie atrybutu Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize
dla metody klasy nie działa.
Dla mnie ten kod powoduje, że InvalidOperationException
zalogował się w oknie wyjściowym, a bomby testowe wcześnie.
[TestClass]
public sealed class Startup
{
[AssemblyInitialize]
public void Configure()
{
System.Diagnostics.Debug.Write("Microsoft.VisualStudio.TestTools.UnitTesting.AssemblyInitialize");
}
}
Czytanie dokumentacji MSDN mówi, aby nie używać AssemblyInitialize
projektów badawczych dla ASP.NET, ponieważ mogą one być nazywane więcej niż jeden raz.
Jak to zrobić, aby log4net był skonfigurowany przed uruchomieniem jakichkolwiek testów?
Czy mogę zaproponować inne podejście, używając abstrakcji do log4net, coś w rodzaju ILogger, który definiuje debugowanie, info, warn, itp. W ten sposób możesz dostarczyć różne implementacje dla ILogger, jeden używający log4net do rzeczywistego logowania i do użycia w twojej aktualnej aplikacji, a drugą coś takiego jak InMemoryLogger, który może być bardzo przydatny do użycia w UnitTesting. Możesz wtedy nawet symulować (używając moq) program ILogger, co nie jest możliwe przy bezpośrednim użyciu log4net. –
Twoje podejście jest lepsze. Chociaż loguję się abstrakcyjnie, nie robię DI z logowaniem, ponieważ nigdy nie potrzebowałem przełączać komponentu logowania - i tak są one konfigurowalne - więc jeśli nadejdzie dzień, gdy log4net będzie musiał odejść, właśnie przekoduję moja fabryka ILogger. W tym przypadku po prostu chciałem zobaczyć moje wyciągi logujące w debugerze. –