Единично тестване - използване на реална стойност или макет?

Имам единичен тест, който потвърждава дали определен модел има свойство или не и дали това свойство не е нула.

И така, нещо като следното:

public function testHasMySpecialProperty()
{
    $this->assertTrue($this->model->getMySpecialProperty());
}

въпроса ми е какъв трябва да е модела. Макет или истинска инсталация на обекта.

Обектът в този случай е потребител на система. Така че, за да се зареди правилно, ще изисквам потребителския идентификатор и т.н. Но ако просто го фалшифицирам, тогава тестът се чувства безполезен


person Marty Wallace    schedule 09.12.2012    source източник
comment
Направете истинския, той ще покаже по-добре как приложението обработва реални стойности.   -  person Rivasa    schedule 09.12.2012


Отговори (3)


Зависи. Използвайте подигравки, за да заглушите поведението на сложни обекти или обекти с външни зависимости, когато този обект не е обект на теста.

Така че, ако тествате поведението на model, използвайте истинското нещо. Ако model е обект с данни, без поведение и без прикачване към външни ресурси (напр. не прави извиквания към база данни), тогава използвайте истинското нещо. Ако model има някакво допълнително поведение или зависимости и не е целта на теста, смейте се с него.

person tallseth    schedule 09.12.2012

Използването на mock всъщност не е тестване на модела. Просто подминете реалния обект и проверете за имота. В крайна сметка това е, което тествате.

person rae1    schedule 09.12.2012

не използвате мокове, за да тествате макетите. използвате подигравки, за да отрежете част от вашата истинска система, която искате да тествате. проверката дали макетът има свойство е тестване на макет. не ви дава повече информация за вашата реална система.

person piotrek    schedule 09.12.2012