Как я могу издеваться над классом, который использует SLF4J Log4J Logger? - PullRequest
0 голосов
/ 06 июля 2019

Я пытаюсь смоделировать класс, который создает экземпляр DatabaseConnection через Hibernate над другим классом, но я получаю ошибки фабрики ошибок SLF4J в классе, но я хочу, чтобы Logger запускался в этом тесте. Как я могу исправить это, чтобы Mock класса и затем успешно создать List и Logger?

Я пытался издеваться над классом (Ingredientadminsitration), а затем это:

PowerMockito.mockStatic(LoggerFactory.class);
        when(LoggerFactory.getLogger(any(Class.class))).
                thenReturn(loggerMock);

Ingredientadministration.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);
        }
    }

1 Ответ

0 голосов
/ 06 июля 2019

Я предлагаю вам проверить, зарегистрировано ли конкретное сообщение?Прежде всего, если вы используете @ sl4j, вам не нужно создавать экземпляр журнала самостоятельно.Lombok сделает это за вас (тогда нужно использовать log.debug (..)).Вы можете получить регистратор в своем тесте через LoggerFactory.getLogger(SomeClass.class);. Вы можете прикрепить смоделированный аппендир и проверить, была ли запись в логе разыскиваемого аппликатора.Вот простой пример: https://dzone.com/articles/unit-testing-asserting-line

...