|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
Метод класса вызывается достаточно много раз и должен работать с одним экземпляром некого объекта. Этот объект я держу как статический в классе метода. Код: c# 1. 2. 3. 4. 5. 6. 7. 8. 9.
Всё хорошо, но вот проблема - хочу сделать юнит-тест для этого метода. При этом хочу этот объект, который статический член, с которым работает метод, подменить во время теста. Но, поскольку метод работает со статическим членом, то этот член всегда достаупен этому методу. Хотел вот спросить - ничего криминального нет в том, чтобы послать этот статический объект методу в виде параметра? - Ну, чисто для надобности удобства тестирования. Или такие случаи как-то более лучше воркэраундятся? ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2014, 22:56 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
НемоКэп42Или такие случаи как-то более лучше воркэраундятся? удалением статического члена, заменой на DI (передача параметром в конструктор - один из вариантов) ... |
|||
:
Нравится:
Не нравится:
|
|||
17.08.2014, 23:17 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
ИзопропилНемоКэп42Или такие случаи как-то более лучше воркэраундятся? удалением статического члена, заменой на DI (передача параметром в конструктор - один из вариантов) А это решение - чисто для удобства тестирования, или вообще лучше, даже без учёта тестов? А то мне иногда кажется глупым менять где-то удобную и понятную структуру программы в угоду удобству тестирования. Как будто тесты главнее кода и композиции программы. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 05:52 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 06:20 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
Алексей К Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
? Во, неплохо уже. ))) А вот теперь такая штука. Метод-то у меня закрытый. Но я уже не раз встречал утверждение - если класс дошёл до закрытых методов, то надо вытаскивать их в другой класс и делать эти методы открытыми. Это что, тестирование ломает всю парадигму ООП и диктует свои условия? Или это только в test driven development такая байда? Для меня это откровение, что надо отказываться от закрытых методов в угоду тестированию. Ещё такое утверждение есть: для всех закрытых методов должны быть открытые обёртки - для тестирования. Что выбрать, как быть? ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 06:58 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
А ещё есть такой костылик, как PrivateObject. От обилия опций кругом идёт голова... ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 07:18 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
Во, нашёл правильный ответ! http://stackoverflow.com/a/18043812/808128 ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 07:19 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
Алексей К Код: c# 1. 2. 3. 4. 5. 6. 7. 8.
? Нет, плохо - тестеру нужно знать, что нужно инициализировать статический член. Пока всё же остановился на передаче статического члена параметров в метод - хоть и очень костыльный вариант, но наиболее компромиссный. ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 07:46 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 07:47 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
НемоКэп42А это решение - чисто для удобства тестирования, или вообще лучше, даже без учёта тестов? на все случаи ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 09:21 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
Всё же, быть статическим членом для myObject как раз подходит по смыслу программы. А вводить DI - это надо в другой класс ответственность за хранение myObject выносить. Сделал так: убрал MyMethod в отдельный хелперный класс (тоже по смыслу подходит), в классе А передаю в метод MyMethod статический объект myObject как параметр. В юнит-тесте создаю отдально этот объект, но уже не как статический. Так я угождаю всем. Единственное, что смущает, это передача стики как параметра. Ну и что? - Потому что могу! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 20:04 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
НемоКэп42Единственное, что смущает, это передача стики статики как параметра. Ну и что? - Потому что могу! ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 20:05 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
НемоКэп42А вводить DI - это надо в другой класс ответственность за хранение myObject выносить. DI контейнер с этим великолепно справляется. И не только с хранением, но и с инстанцированием. При необходимости - за временем жизни может проследить НемоКэп42Так я угождаю всем есть 1001 способ выстрелить себе в ногу ... |
|||
:
Нравится:
Не нравится:
|
|||
18.08.2014, 22:12 |
|
Послать по ссылке статический член класса в метод этого же класса?
|
|||
---|---|---|---|
#18+
Ну, я пока не вижу проблемы в этом. Работает же. Как будут проблемы - будут решать. В принципе, мне подход с DI понятен - я даже могу, при желании подыскать для myObject класс, чтобы он о нём заботился. Но мне лень переделывать некритичный участок кода, который и так работает. ... |
|||
:
Нравится:
Не нравится:
|
|||
19.08.2014, 17:47 |
|
|
start [/forum/topic.php?fid=20&msg=38722154&tid=1402579]: |
0ms |
get settings: |
8ms |
get forum list: |
13ms |
check forum access: |
4ms |
check topic access: |
4ms |
track hit: |
40ms |
get topic data: |
8ms |
get forum data: |
2ms |
get page messages: |
46ms |
get tp. blocked users: |
1ms |
others: | 12ms |
total: | 138ms |
0 / 0 |