Прискорбно, что вы используете getResultState()
, чтобы создать объект ResultState
, сам по себе, который на самом деле является вашим блокирующим устройством.Рассмотрим рефакторинг в следующем интерфейсе:
protected ResultState initResultState ()
{
this.resultState = new ResultState();
// Initialization Logic...
return this.resultState;
} // END initResultState
public ResultState getResultState ()
{
if (this.resultState === null)
{
return this.initResultState();
}
return this.resultState;
} // END getResultState()
С этой позиции легче проверить ваш метод получения. Определение класса потомка, который возвращает известный ResultState
Stub для initResultState()
, которые могут быть допрошены, а именно:
/**
* The test fixutre's initResultState() method merely returns a simple Stub of
* the ResultState object, which can be more easily interrogated.
*/
public ResultState initResultState ()
{
return new Stub_ResultState();
} // END initResultState
Это по-прежнему оставляет вас с защищенным initResultState()
, конечно. Рассмотрим следующий рефакторинга:
protected ResultState initResultState (ResultState newResultState)
{
this.resultState = newResultState;
// Initialization Logic...
return this.resultState;
} // END initResultState
public ResultState getResultState ()
{
if (this.resultState === null)
{
return this.initResultState(new ResultState());
}
return this.resultState;
} // END getResultState
Это позволяет вам переопределить метод getResultState()
в потомке класса таким образом, что вы можете передать другой объект ResultState
Заглушка манипулировать и допрошен после этого, например:
/**
* The test fixture's getResultState() method always acts as a passthrough for
* initResultState(), which is protected, so that the output of the protected
* method can be interrogated.
*/
public ResultState getResultState ()
{
return this.initResultState(new Stub_ResultState());
} // END getResultState
С этой позиции вам нужно два теста: тот, который переопределяет поведение initResultState()
для проверки функциональности геттеров; другой, который переопределяет поведение getResultState()
, чтобы проверить поведение initResultState()
. Оба используют экземпляр класса Stub_ResultState
, который обязательно является потомком класса ResultState
, но обеспечивает открытый доступ к внутренним значениям его родительского объекта для опроса в модульных тестах.
Я надеюсь, что это имеет смысл, но не стесняйтесь просить разъяснений.
+1 - примерно слово в слово, что я собирался сказать –
Jon, Хороший вопрос - что важно для результата. Подумав об этом - самое главное, что результат должен быть объектом, ожидаемым методами, которые будут его использовать.И это выполняется в // LOGIC // разделе кода, где LOGIC манипулирует полями «this» Итак, я выполнил следующие тестовые сценарии: 1. Я настроил сеттеры и геттеры для этих полей 2. set 3) и построить его без исключений ... – 2009-06-24 16:01:56