powered by simpleCommunicator - 2.0.55     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Послать по ссылке статический член класса в метод этого же класса?
14 сообщений из 14, страница 1 из 1
Послать по ссылке статический член класса в метод этого же класса?
    #38722067
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Метод класса вызывается достаточно много раз и должен работать с одним экземпляром некого объекта. Этот объект я держу как статический в классе метода.

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
class A
{
    public static MyObject myObject;
    
    private void MyMethod() 
    {
        // Работаем с myObject...
    }
}



Всё хорошо, но вот проблема - хочу сделать юнит-тест для этого метода. При этом хочу этот объект, который статический член, с которым работает метод, подменить во время теста. Но, поскольку метод работает со статическим членом, то этот член всегда достаупен этому методу.

Хотел вот спросить - ничего криминального нет в том, чтобы послать этот статический объект методу в виде параметра? - Ну, чисто для надобности удобства тестирования.

Или такие случаи как-то более лучше воркэраундятся?
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722080
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Или такие случаи как-то более лучше воркэраундятся?

удалением статического члена,
заменой на DI (передача параметром в конструктор - один из вариантов)
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722145
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
ИзопропилНемоКэп42Или такие случаи как-то более лучше воркэраундятся?

удалением статического члена,
заменой на DI (передача параметром в конструктор - один из вариантов)
А это решение - чисто для удобства тестирования, или вообще лучше, даже без учёта тестов?

А то мне иногда кажется глупым менять где-то удобную и понятную структуру программы в угоду удобству тестирования. Как будто тесты главнее кода и композиции программы.
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722148
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class MyTest
{
    public void MyTestMethod()
    {
        A.myObject = new MyObjectTestImpl();        
        new A().MyMethod();
    }
}


?
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722151
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class MyTest
{
    public void MyTestMethod()
    {
        A.myObject = new MyObjectTestImpl();        
        new A().MyMethod();
    }
}


?
Во, неплохо уже. )))

А вот теперь такая штука. Метод-то у меня закрытый. Но я уже не раз встречал утверждение - если класс дошёл до закрытых методов, то надо вытаскивать их в другой класс и делать эти методы открытыми.

Это что, тестирование ломает всю парадигму ООП и диктует свои условия? Или это только в test driven development такая байда? Для меня это откровение, что надо отказываться от закрытых методов в угоду тестированию.

Ещё такое утверждение есть: для всех закрытых методов должны быть открытые обёртки - для тестирования.

Что выбрать, как быть?
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722154
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
А ещё есть такой костылик, как PrivateObject.

От обилия опций кругом идёт голова...
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722155
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Во, нашёл правильный ответ! http://stackoverflow.com/a/18043812/808128
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722157
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Алексей К
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
class MyTest
{
    public void MyTestMethod()
    {
        A.myObject = new MyObjectTestImpl();        
        new A().MyMethod();
    }
}


?
Нет, плохо - тестеру нужно знать, что нужно инициализировать статический член.

Пока всё же остановился на передаче статического члена параметров в метод - хоть и очень костыльный вариант, но наиболее компромиссный.
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722158
Фотография Алексей К
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Что выбрать, как быть? 16453234

?
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722188
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42А это решение - чисто для удобства тестирования, или вообще лучше, даже без учёта тестов?
на все случаи
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722927
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Всё же, быть статическим членом для myObject как раз подходит по смыслу программы. А вводить DI - это надо в другой класс ответственность за хранение myObject выносить.

Сделал так: убрал MyMethod в отдельный хелперный класс (тоже по смыслу подходит), в классе А передаю в метод MyMethod статический объект myObject как параметр. В юнит-тесте создаю отдально этот объект, но уже не как статический.

Так я угождаю всем. Единственное, что смущает, это передача стики как параметра. Ну и что? - Потому что могу!
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722928
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42Единственное, что смущает, это передача стики статики как параметра. Ну и что? - Потому что могу!
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38722999
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
НемоКэп42А вводить DI - это надо в другой класс ответственность за хранение myObject выносить.
DI контейнер с этим великолепно справляется. И не только с хранением, но и с инстанцированием.
При необходимости - за временем жизни может проследить


НемоКэп42Так я угождаю всем
есть 1001 способ выстрелить себе в ногу
...
Рейтинг: 0 / 0
Послать по ссылке статический член класса в метод этого же класса?
    #38723727
НемоКэп42
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну, я пока не вижу проблемы в этом. Работает же. Как будут проблемы - будут решать.

В принципе, мне подход с DI понятен - я даже могу, при желании подыскать для myObject класс, чтобы он о нём заботился. Но мне лень переделывать некритичный участок кода, который и так работает.
...
Рейтинг: 0 / 0
14 сообщений из 14, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Послать по ссылке статический член класса в метод этого же класса?
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]