2015-03-20 4 views
2

Я хотел бы выполнить метод только при запуске теста.Код запуска только при тестировании

Это завершение теста интеграции. Когда я запускаю интеграционный тест, я хочу сгенерировать json-файл с состоянием объекта.

Я думаю, что делать что-то подобное в моем коде:

if(environnement == TEST) { 
    // save object as json 
} 

Вы знаете другой способ сделать это? меньше терапии?

С уважением

+0

Вы можете перенести тест равенства в свою собственную функцию, называемую «testingIsOn». Вам нужно быть более конкретным относительно того, что означает «менее дерьмовое». – Carcigenicate

+0

@Carcigenicate: Менее дерьмово, потому что я должен добавить в свой код код для проверки теста:/ – Snorks

+0

@SeniorJD Что вы назначаете? – Snorks

ответ

0

Как об использовании функции Polymorphism ООП?

abstract class MyObject { 
    void doSomething(); 
} 

class MyObjectImpl { 
    void doSomething() { 
     // real implementation 
    } 
} 

class MyObjectTest { 
    void doSomething() { 
     // create your json or other test functional 
    } 
} 

class MyObjectFactory { 
    static getMyObject(Environment env) { 
     if (env == Environment.TEST) { 
      return new MyObjectTest(); 
     } else { 
      return new MyObjectImpl(); 
     } 
    } 
} 
+0

Не совсем уверен, что это шаблон прокси ... – dit

+0

Хм ... Я был уверен, что вся моя жизнь такая. Но из-за U, я тоже не совсем уверен. Спасибо = \ – SeniorJD

+1

Похож на фабрику для меня. –

0

Я обычно обеспечивают тест «крючки», используя этот шаблон

public class MyObject { 

    public void doStuff() { 
     // stuff to do 

     onCompleteStuff(); 
    } 

    protected void onCompleteStuff() { 
    } 
} 

Затем в тестовом коде вы можете создать подкласс MyObject, что делает ваш тест-только действия:

private MyObject newMyObject() { 
return new MyObject() { 
    @Override 
    protected void onCompleteStuff() { 
     saveObjectAsJson(); 
    } 
}; 
} 

Это имеет преимущество, заключающееся в том, что тестовый код не соответствует вашей основной сборке. Он также будет работать, если вы должны использовать макет в своих тестах. Например, используя отличную библиотеку Mockito:

MyObject foo=Mockito.spy(new MyObject()); 

doAnswer(new Answer<Object>() { 
    @Override 
    public Object answer(InvocationOnMock invocation) throws Throwable { 
    saveObjectToJson(); 
    return null; 
    } 
}).when(foo).onCompleteStuff(); 
+0

Извините, но если бы я увидел этот код в реальной жизни, я, вероятно, побью его автора. – SeniorJD

Смежные вопросы