JUnit (test 3 ve 4 stili karışımı) ile test edilen bir Java projem var, test edilen sınıflar bir log4j hatası kaydedebilir. Böyle bir hata kaydedilirse birim testi başarısız olur.Log4j hatası() çağrıları jUnit testlerinde istisna atar?
çalışma zamanı istisnası bir log4j hatasına herhangi bir çağrı test altındaki kodu() yöntemi yapmak ve bu nedenle testi başarısız olmasına log4j veya birim test altyapısını ya yapılandırmak için genel bir yolu var mı? AOP bir yol olabilir, ama başka olasılıklarla da ilgileniyorum.
Buradaki amaç, log4j error() öğesinin yanlış kullanıldığı yerlerde kodun ayıklanmasıdır. Yani, bir hata günlüğe kaydedilir, ancak bir istisna veya hata işleme gerçekleşmediğinde, ya gerçekten bir hata değildir, ya da yükseltilmelidir.
örn:
public class MyTest extends TestCase {
public void testLogAnError() {
// Want to make this fail
new MyClass().logAnError();
}
}
public class MyClass() {
static Logger logger = Logger.getLogger("foo");
public void logAnError() {
// I'm logging an error, but not doing anything about it
logger.error("Something bad, or is it?");
// TODO throw an exception or don't log an error if there isn't one
}
}
Güncelleme: Bu kullanıyorum çözüm şu anda böyle görünüyor. Bu sbridges' cevabına göre (test sınıfa eklendi):
Sonraprivate static final Appender crashAndBurnAppender = new NullAppender() {
public void doAppend(LoggingEvent event) {
if(event.getLevel() == Level.ERROR) {
throw new AssertionError("logged at error:" + event.getMessage());
}
}
};
setUp içinde:
Logger.getRootLogger().addAppender(crashAndBurnAppender);
ve ayırma:
Logger.getRootLogger().removeAppender(crashAndBurnAppender);
Testten sonra 'Logger.getRootLogger(). AddAppender (yeni TestAppender()); Logger statik olduğundan, bu eklenti de kaldırılmazsa bir sonraki testte de yayınlanacak! - Bunu bir '@ '' Yönteminde veya son ifadede yapmalısınız, çünkü testinizdeki" normal "kod istisnadan sonra yürütülmeyecektir. – Ralph
Parlak! Böyle bir şeyim var ve kaçıyor ... – Rog