poi-user mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "gallon.fizik@gmail.com"<gallon.fi...@gmail.com>
Subject WorkbookEvaluator vs JUnit: WE seems to save state between test calls
Date Thu, 21 Dec 2017 14:36:42 GMT
Hello, I have a simple test class: 

import org.apache.poi.ss.formula.WorkbookEvaluator;
import org.apache.poi.ss.formula.eval.NumberEval;
import org.apache.poi.ss.formula.eval.ValueEval;
import org.apache.poi.ss.formula.functions.Function;
import org.junit.Test;

public class FunctionRegistratorIT1 {
    public void testRegisterFunction1() {
        WorkbookEvaluator.registerFunction("TREND", new DummyExcelFunction());

    public void testRegisterFunction2() {
        WorkbookEvaluator.registerFunction("TREND", new DummyExcelFunction());

    private class DummyExcelFunction implements Function {
        public ValueEval evaluate(ValueEval[] args, int srcRowIndex, int srcColumnIndex) {
            return new NumberEval(0);

Oddly enough, the test being executed second fails with 'IllegalArgumentException: POI already
implements TREND. You cannot POI's implementations of Excel functions'. If I comment one of
the tests out, the other one passes. This behavior persists if the same function is registered
in different tests across a test suite.

I expected that every @Test is run in isolation, but it seems that WorkbookEvaluator stores
registered functions between invocations of different tests within a suite.

Although it is possible that it is probably related to JUnit rather than POI, perhaps someone
here has already witnessed this behavior.

To sum up, the questions are:
* why does this happen?
* how can I have get several tests registering the same function names work?


To unsubscribe, e-mail: user-unsubscribe@poi.apache.org
For additional commands, e-mail: user-help@poi.apache.org

View raw message