All Downloads are FREE. Search and download functionalities are using the official Maven repository.

de.tsl2.nano.autotest.creator.ADefaultAutoTester Maven / Gradle / Ivy

The newest version!
package de.tsl2.nano.autotest.creator;

import static org.mockito.Mockito.mock;

import java.util.Arrays;
import java.util.HashMap;
import java.util.Map;

import org.mockito.MockitoAnnotations;

import de.tsl2.nano.core.ManagedException;
import de.tsl2.nano.core.cls.BeanClass;
import de.tsl2.nano.core.util.Util;

public class ADefaultAutoTester {
    public static final String KEY_AUTOTEST_INITMOCKITO = "tsl2nano.autotest.initmockito";
    public static final String DEFAULT_MOCK_CLASSNAMES[] = {
            "javax.persistence.Inject",
            "javax.persistence.EntityManager",
            "javax.persistence.PersistenceContext",
            "javax.annotation.Resource",
            "javax.ejb.EJB",
            "jakarta.persistence.Inject",
            "jakarta.persistence.EntityManager",
            "jakarta.persistence.PersistenceContext",
            "javax.ws.rs.client.Client"
    };

    // @Before  <- setUp() is explicitly called on each AFuctionCaller.run()
    public void setUp() {
        if (Boolean.getBoolean(System.getProperty(KEY_AUTOTEST_INITMOCKITO, "false"))) {
            provideDefaultMocks(this);
        }
        try {
            BeanClass.callStatic("de.tsl2.nano.util.autotest.creator.AllAutoTests", "before");
        } catch (ManagedException e) {
            // Ok, not available
        }
    }

    // @After <- tearDown is explicitly called on each AFuctionCaller.run()
    public void tearDown() {
        try {
            BeanClass.callStatic("de.tsl2.nano.util.autotest.creator.AllAutoTests", "after");
        } catch (ManagedException e) {
            // Ok, not available
        }
    }

    public Map provideDefaultMocks(Object testInstance) {
        MockitoAnnotations.initMocks(this);

        Map mocks = new HashMap<>();
        String mockClassNames[] = System
                .getProperty("tsl2.nano.auotest.defaultmocks", Arrays.toString(DEFAULT_MOCK_CLASSNAMES)).split(",");
        for (int i = 0; i < mockClassNames.length; i++) {
            final String name = mockClassNames[i];
            Class mockCls = Util.trY(() -> Thread.currentThread().getContextClassLoader().loadClass(name), false);
            if (mockCls != null) {
                mocks.put(mockCls, initMockObject(mock(mockCls)));
            }
        }
        return mocks;
    }

    // TODO use function overloading to avoid if-else blocks
    // with mockito we have a problem on generalizing providing results
    // perhaps it's better to use own proxying
    public  T initMockObject(T mockObject) {
        if (mockObject.getClass().isAssignableFrom(getClass() /* TODO: which class without dependency???*/)) {
            // when(mock)
        }
        return mockObject;
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy