Создание объекта Mock с использованием Mockito и PowerMockito

У меня есть класс под названием SampleClass. У этого есть много статических полей, и этот класс в настоящее время используется в каком-то другом классе. Я новичок в Mockito и Power Mockito. Я изо всех сил пытался издеваться над SampleClass. Не могли бы вы, ребята, помочь, дав мне знать, как издеваться над SampleClass.

Я предоставил как SampleClass, так и подробности его использования ниже для справки.

SampleClass.java:

public class SampleClass {
    private static CatFactory catFactory = null;
    private static String catPath = SampleConfigurationManager.getInstance().getProperty("locale_path", "");
    private static URI catURI = (new File(catPath)).toURI();

    private static SampleClass catBusinessLogic;
    private static Logger logger = Logger.getInstance(SampleClass.class);


    private SampleClass() {
        initializeCatFactory();
    }

    public static SampleClass getInstance() {   
        try{
            if(catBusinessLogic == null) {
                catBusinessLogic = new SampleClass();   
            }
        }catch(Exception e ){
            e.printStackTrace();
        }

        return catBusinessLogic;
    }

    public Cat getCat(String code) throws CatException {
        logger.log(LogLevel.DEBUG, "SampleClass::getCat ENTRY");
        Cat countryCat = null;
        if (catFactory != null) {
            countryCat = catFactory.getCat(code);
        }
        logger.log(LogLevel.DEBUG, "SampleClass::getCat EXIT");

        if( countryCat == null ) {
            throw new CatException("Failed to create CAT object");
        }
        return countryCat;
    }

    public static void initializeCatFactory() throws CatException{
        logger.log(LogLevel.DEBUG, "SampleClass::initializeCatFactory ENTRY");
        try {
            catFactory = new CatFactory(catURI.toURL());
        } catch (MalformedURLException mue) {
            logger.log(LogLevel.FATAL, "MalformedURLException while creating CATFactory " + mue.toString());
            throw new CatException("Failed to create CATFactory");
        }
        logger.log(LogLevel.DEBUG, "SampleClass::initializeCatFactory EXIT");
    }
}

Использование SampleClass в другом классе:

SampleClass sampleClass = SampleClass.getInstance();
String code = "ABC";
Cat cat = sampleClass.getCat(code);
CATUtil catUtil = new CATUtil(cow);

person Manikdn84    schedule 13.01.2016    source источник
comment
в чем именно проблема?: Вы получаете какую-либо ошибку, издеваясь над упомянутым классом?   -  person Prerak Tiwari    schedule 13.01.2016
comment
Да .. Пожалуйста, обратитесь к деталям, которые я упомянул в этой теме ниже.   -  person Manikdn84    schedule 14.01.2016


Ответы (1)


Если у вас есть синглтон SampleClass. Ниже приведен пример кода одноэлементного класса.

public class SampleClass {
    private static SampleClass INSTANCE;

    public static SampleClass getInstance() {
        if (INSTANCE == null) {
            INSTANCE = new SampleClass();
        }

        return INSTANCE;
    }

    public String someMethod() {
        return "hello";
    }
}

Следующий класс, где вы используете SampleClass, выглядит так.

public class SomeOtherClass {
    public String hello(){
        return SampleClass.getInstance().someMethod() + "+other";
    }
}

Если вы хотите смоделировать свой одноэлементный класс SampleClass, ваш код может выглядеть так:

@RunWith(PowerMockRunner.class)
@PrepareForTest(SampleClass.class)
public class SompleTest {

    @Test
    public void someTest() throws Exception {
        //GIVEN
        //create a mock (you can use Mockito or PowerMock)
        SampleClass mock = Mockito.mock(SampleClass.class);
        Mockito.when(mock.someMethod()).thenReturn("test");

        //when object `SampleClass` is created, then return mock
        PowerMockito.whenNew(SampleClass.class).withNoArguments().thenReturn(mock);

        //WHEN
        String hello = new SomeOtherClass().hello();

        //THEN
        Assert.assertEquals("test+other", hello);
    }
}
person Mateusz Korwel    schedule 13.01.2016