Похожие чаты

Interfaces are useful in writing code that's easy to test.



For example, You have a function called Router that takes a DB struct.

The DB struct has a field called mdb which is a connection to monogdb database.

A function called InitDB opens a mongdb connection and returns *DB. Then, You can use this value returned by InitDB to call Router.

All looks good, Right??

well, Now, What if you want to write tests for your code?

If you continue with current approach, It means, You'll need a environment where you can run the database, Seed some initial values in database and maybe even reset them after every test.

This quickly becomes a PITA.


What if Router took a interface called IDB. This interface has definitions of all the methods that you'll use in rest of your code.


When you want to run you code in production, The DB struct implements IDB Interface and DB struct can be passed to Router because router takes IDB.

When you want to test your code, You create another struct called FDB that also implements IDB Interface, But instead of establishing connection with a database and everything, It only mocks the database.

For example,
When you store a json blob in database, The database responds with { result: "ok" }, In the method defined on DB struct, it goes ahead and stores the value in database and sends whatever response database sent back.

But in the method defined on FDB, You don't call the database routines at all, You just mock the database response and send it back.

2 ответов

14 просмотров

Thanks, this clears things a bit ^_^

This was a great explanation of interfaces and an example of how to implement them. It should help me with the issue I posted above, thanks for this. At least it gives me a direction to go in.

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

Обсуждают сегодня

Ready for some fun AND a chance to win TKO Tokens? Join us for exciting minigames in our Telegram group! 🕒 Don’t miss out—games start on today 25 October 2024, at 8 PM! Ge...
Milkyway | Tokocrypto
255
Добрый вечер. Есть вопрос, а может и предложение. Был у меня диалог в другой группе о делфи и я задался вопросом: "А нельзя ли в делфи цвет //коментария и {комментария} сде...
Kraszx
24
How are we going bro about the Raids ??
🅿️abby_FX
13
Мдя, прикол, боевая сборка запускается (именно под отладчиком) после F9 примерно полторы минуты (97 секунд если быть точным). Начал копать - проблема детектится сразу - зависа...
Александр (Rouse_) Багель
38
Всем привет! Подскажи, пожалуйста, как передать в TComboBox сразу значение и id записи. На Delphi я делал так: ComboBox1.Items.AddObject('Какое-то значение', Pointer(id запис...
Евгений
10
Keep saying it, it’s Trump or WW3. Iran will be emboldened if Harris wins by cheating. Israel will have to take the initiative against Iran. How has BTC faired everytime the...
Adz | Ferrum Network Product & Service Consultant @ Ferrum Network
1
я так понимаю, я так подозреваю, что создание такого плагина для человека, кто умеет писать плагины для делфи потребует минут 5-10 времени. но это мое подозрение. хотелось бы ...
Kraszx
7
Товарищи, кто работа с iphelper? Или может я в самой логике ошибки фигачу, не пойму.... var ifTable : PMIB_IFTABLE; size, corSize: DWORD; Buffer ...
Warfarellen
4
Здравствуйте, вопрос по структурам данных. Были у вас случаи, когда пришлось писать деревья или двунаправленные списки?
/ /
50
Коллеги, добрый вечер. Создаю коллекцию от TFPGMap, ключ - перечисление, значение - целое. Нужно отсортировать коллекцию по значению. Как это можно сделать?
Kirill Filippenok
11
Карта сайта