Войти
ПрограммированиеФорумОбщее

Синглтон (Singleton) (комментарии) (4 стр)

Страницы: 1 2 3 4
#45
0:53, 1 фев. 2014

laMer007
> Все что с ними - просто напрочь не тестируемо и не тестируется.

Что это за проблемы тестирования из-за сингелтонов?


#46
1:09, 1 фев. 2014

Kartonagnick
Вы всегда так пишите, что кажется что вот он почти конец... Разворачиваешь, а там ещё абзац, снова уверен вот он конец и снова и снова...

#47
1:12, 1 фев. 2014

Kartonagnick
Как подменять синглтон на новый синглтон-заглушку для теста некого модуля, в котором находится обращение к синглтону? Ну вот например чтобы во время теста перестал писать в лог. Или наоборот, чтобы на время теста записывал все в массив, а потом тестовый фреймворк по содержимому массива вычислил корректность результата.
?

#48
1:56, 1 фев. 2014

laMer007
> Как подменять синглтон на новый синглтон-заглушку для теста некого модуля, в
> котором находится обращение к синглтону? Ну вот например чтобы во время теста
> перестал писать в лог. Или наоборот, чтобы на время теста записывал все в
> массив, а потом тестовый фреймворк по содержимому массива вычислил корректность
> результата.
> ?

Обычно, если механизм изначально писался по методике тестирования, то в нем изначально предусматривается все необходимое для возможности проведения простых тестов.
Если жеж нужно тестировать то, что уже было написано, тогда приходится выкручиваться.

Например вот так:

+ Показать
#49
6:52, 1 фев. 2014

Kartonagnick
жуть, не бойтесь виртуальных сервисов)
у меня реализация подмены mute-sound service происходит на этапе инициализации когда система понимает что OAL она инициализировать не может(нет дров) и вся игра работает корректно, отыгрывает звуки - правильное время и тд. это важно

#50
15:20, 1 фев. 2014

IROV..
> жуть, не бойтесь виртуальных сервисов)

Не очевидно, что вы такого жуткого разглядели.

Что касается сервисов - я вроде бы не давал повода думать, будто бы боюсь их.
Я дал повод подумать о том, что необходимо пользователю для работы, и сплясать от этой необходимости, не нагружая его неинтересными ему деталями.

#51
16:40, 1 фев. 2014

Не являюсь сторонником повсеместного применения синглтонов, но при работе с JNI они довольно удобны.
Для преобразования Java-класса в C++-класс и наоборот завел такую штуку:

class PositionClassInfo
{
    JNIEnv* env;
    jclass cls;
    jfieldID xField;
    jfieldID yField;
    jmethodID ctor;
public:
    PositionClassInfo(JNIEnv* env) : env(env)
    {
        cls = env->FindClass("com/test/Position");
        cls = (jclass)env->NewGlobalRef(cls);
        xField = env->GetFieldID(cls, "x", "F");
        yField = env->GetFieldID(cls, "y", "F");
        ctor = env->GetMethodID(cls, "<init>", "()V");
    }

    jobject createNew(const vec2& value) const
    {
        jobject obj = env->NewObject(cls, ctor);
        setValue(obj, value);
        return obj;
    }

    vec2 getValue(jobject obj) const
    {
        float x = env->GetFloatField(obj, xField);
        float y = env->GetFloatField(obj, yField);
        return vec2(x, y);
    }

    void setValue(jobject obj, const vec2& value) const
    {
        env->SetFloatField(obj, xField, value.x);
        env->SetFloatField(obj, yField, value.y);
    }

    static const PositionClassInfo& get(JNIEnv* env)
    {
        static __thread PositionClassInfo instance(env);
        return instance;
    }
};
Usage:
JNIEXPORT jobject JNICALL jni_method(JNIEnv* env, jobject p)
{
    const auto& classInfo = PositionClassInfo::get(env);
    vec2 v = classInfo.getValue(p);
    return classInfo.createNew(v * 2);
}

Страницы: 1 2 3 4
ПрограммированиеФорумОбщее

Тема в архиве.