Проверка результатов Фабрики в модульном тесте

По умолчанию конструкторы должны быть предпочтительнее, потому что их проще понять и написать. Однако, если вам нужно отделить конструктивные тонкости объекта от его смыслового значения, понимаемого кодом клиента, вам будет лучше использовать фабрики.

Разница между конструкторами и фабриками аналогична , скажем, переменную и указатель на переменную. Существует еще один уровень косвенности, что является недостатком; но есть еще один уровень гибкости, что является преимуществом. Поэтому, делая выбор, вам было бы полезно провести анализ затрат и выгод.

16
задан javelinBCD 1 September 2008 в 08:08
поделиться

3 ответа

Так как я не знаю, как Ваш метод фабрики похож, все, чему я могу советовать, прямо сейчас к

  1. Проверка, чтобы видеть, что объект является корректной конкретной реализацией, которую Вы искали:

    IMyInterface fromFactory = factory.create(...);  
    Assert.assertTrue(fromFactory instanceof MyInterfaceImpl1);
    
  2. можно проверить если установка фабрики конкретные экземпляры с допустимыми переменными экземпляра.

19
ответ дан 30 November 2019 в 15:52
поделиться

@cem-catikkas я думаю, что это было бы более корректно для сравнения getClass () .getName () значения. В случае, что класс MyInterfaceImpl1 разделяется на подклассы, мог быть поврежден Ваш тест, поскольку подкласс является instanceof MyInterfaceImpl1. Я переписал бы следующим образом:

IMyInterface fromFactory = factory.create(...);  
Assert.assertEquals(fromFactory.getClass().getName(), MyInterfaceImpl1.class.getName());

, Если Вы думаете, что это могло бы перестать работать в некотором роде (я не могу вообразить), сделайте эти две проверки.

0
ответ дан 30 November 2019 в 15:52
поделиться
if (myNewObject instanceof CorrectClass)
{
    /* pass test */
}

обновление:

не знают, почему это было отмечено, таким образом, я разверну его немного...

public void doTest()
{
    MyInterface inst = MyFactory.createAppropriateObject();
    if (! inst instanceof ExpectedConcreteClass)
    {
        /* FAIL */
    }
}
0
ответ дан 30 November 2019 в 15:52
поделиться
Другие вопросы по тегам:

Похожие вопросы: