Как правильно спроектировать классы, чтобы внутреннюю логику можно было тестировать по модулям? ⇐ C#
Как правильно спроектировать классы, чтобы внутреннюю логику можно было тестировать по модулям?
Я изо всех сил пытаюсь понять, как правильно проектировать код в большой кодовой базе, чтобы можно было легко тестировать части внутренней логики. Вот выдуманный пример:
публичный класс SomeService { публичный SomeService(){} публичное DoThingA (bool flagA) { // много логики ... // в конечном итоге получаем какой-то объект либо через запрос, либо каким-либо другим способом Ответ ObjectA = makeSomeHttpRequest(); // получаем некоторое значение на основе объекта и некоторых других полей вар URL = GenerateUrl (ответ, flagA); // больше логики } частная строка GenerateUrl (ответ ObjectA, bool flagA) { if (response.field1 == "foo" && flagA) { вернуть «plugh.com»; } иначе если (response.field1 == "бар") { вернуть «xyzzy.com»; } еще { вернуть «thud.com»; } } } Если бы я хотел написать модульный тест для обработки логики GenerateUrl, как бы я это сделал?
[*]Возможно, будет непросто выяснить ответ GenerateUrl путем вызова DoThingA, поэтому я не хочу этого делать. [*]Логика GenerateUrl относительно небольшая и является внутренней логикой DoThingA(), поэтому я бы предпочел не публиковать ее только для тестирования. [*]Я мог бы переместить логику GenerateUrl в отдельный класс, от которого зависит SomeService, но в большую базу кода, что приведет к сотням очень маленьких классов, которые могут иметь всего несколько строк логики.
Итак, как правильно это структурировать, чтобы можно было проверить внутреннюю логику? Возможно, GenerateUrl на самом деле представляет собой некую логику проверки или просто любую функцию, для которой я хотел бы использовать модульные тесты.
Я изо всех сил пытаюсь понять, как правильно проектировать код в большой кодовой базе, чтобы можно было легко тестировать части внутренней логики. Вот выдуманный пример:
публичный класс SomeService { публичный SomeService(){} публичное DoThingA (bool flagA) { // много логики ... // в конечном итоге получаем какой-то объект либо через запрос, либо каким-либо другим способом Ответ ObjectA = makeSomeHttpRequest(); // получаем некоторое значение на основе объекта и некоторых других полей вар URL = GenerateUrl (ответ, flagA); // больше логики } частная строка GenerateUrl (ответ ObjectA, bool flagA) { if (response.field1 == "foo" && flagA) { вернуть «plugh.com»; } иначе если (response.field1 == "бар") { вернуть «xyzzy.com»; } еще { вернуть «thud.com»; } } } Если бы я хотел написать модульный тест для обработки логики GenerateUrl, как бы я это сделал?
[*]Возможно, будет непросто выяснить ответ GenerateUrl путем вызова DoThingA, поэтому я не хочу этого делать. [*]Логика GenerateUrl относительно небольшая и является внутренней логикой DoThingA(), поэтому я бы предпочел не публиковать ее только для тестирования. [*]Я мог бы переместить логику GenerateUrl в отдельный класс, от которого зависит SomeService, но в большую базу кода, что приведет к сотням очень маленьких классов, которые могут иметь всего несколько строк логики.
Итак, как правильно это структурировать, чтобы можно было проверить внутреннюю логику? Возможно, GenerateUrl на самом деле представляет собой некую логику проверки или просто любую функцию, для которой я хотел бы использовать модульные тесты.
-
- Похожие темы
- Ответы
- Просмотры
- Последнее сообщение
-
-
Отдавайте предпочтение Kestrel за оперативность, а не за внутреннюю логику.
Anonymous » » в форуме C# - 0 Ответы
- 10 Просмотры
-
Последнее сообщение Anonymous
-