我尝试模拟一个通过 Hibernate 在其他类上实例化 DatabaseConnection 的类,但我在该类中收到 SLF4J 错误工厂的错误,但我希望记录器在此测试中运行。我怎样才能修复这个问题以模拟类,然后成功实例化列表和记录器?
我尝试模拟类(Ingredientadminsitration),然后是这样的:
PowerMockito.mockStatic(LoggerFactory.class);
when(LoggerFactory.getLogger(any(Class.class))).
thenReturn(loggerMock);
成分管理.java
@Slf4j
public class Ingredientsadministration {
private ObservableList<Ingredient> zutaten;
private SQLConnection sqlConnection;
private static Ingredientsadministration ingredientsadministration;
private Logger logger;
private Ingredientsadministration() {
logger = LoggerFactory.getLogger(this.getClass());
connectToDB();
zutaten = FXCollections.observableArrayList(sqlConnection.getZutaten());
}
public static Ingredientsadministration getInstance() {
if (ingredientsadministration == null) {
ingredientsadministration = new Ingredientsadministration();
}
return ingredientsadministration;
}
MySQLHibernate.java
@Slf4j
public class MySQLConnectHibernate implements SQLConnection {
private static SessionFactory sessionFactory;
private Session session;
private Logger logger;
private static MySQLConnectHibernate entity;
private MySQLConnectHibernate() throws ServiceException {
logger = LoggerFactory.getLogger(this.getClass());
setup();
}
public static MySQLConnectHibernate getInstance() {
if (entity == null) {
entity = new MySQLConnectHibernate();
}
return entity;
}
private void setup() throws ServiceException {
if (sessionFactory == null) {
sessionFactory = new Configuration().configure().buildSessionFactory();
logger.debug("Create new SessionFactory={}.", sessionFactory);
}
}
最佳答案
我建议您要测试是否记录了特定消息?首先,如果您使用@sl4j,则不必自己实例化记录器。然后应该使用 Lombok 将为您执行此操作(log.debug(..))。您可以通过 LoggerFactory.getLogger(SomeClass.class); 接收测试中的记录器;您可以附加一个模拟的附加程序,并检查所需的日志条目是否已写入您的模拟附加程序。这是一个简单的例子:https://dzone.com/articles/unit-testing-asserting-line
关于java - 如何模拟使用 SLF4J Log4J Logger 的类?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56915386/