При переходе с Java на C #, что я должен знать о классах доступа - PullRequest
0 голосов
/ 22 августа 2009

Я сейчас программирую на Java и пишу на C #. Я видел классы Accessor, сгенерированные программным обеспечением для генерации тестов VS (чтобы предоставить доступ из тестов частным членам или функциям) Должен ли я создавать аксессоры намеренно и если да, то почему

Ответы [ 3 ]

2 голосов
/ 22 августа 2009

Сгенерированные средства доступа в MSTest предназначены для тестирования закрытых частей классов. Так что уже там я хотел бы спросить себя, должны ли мы явно тестировать внутренние устройства.

Я считаю, что модульные тесты должны демонстрировать только публичное лицо класса, поэтому сгенерированные средства доступа становятся устаревшими. По моему опыту, это хорошо, так как я нахожу их нетривиальными для поддержания, особенно когда все меняется (как это обычно происходит с рефакторингом).

1 голос
/ 22 августа 2009

В «Искусстве модульного тестирования» Роя Ошерова он упоминает действительно важную вещь о потребителях ваших классов. Модульные тесты являются потребителями и используют API. Если вам нужно изменить видимость вашего API, то для тестирования, то вы должны. Не используйте аксессоры, если можете их избежать.

На самом деле я предлагаю прочитать эту книгу: -)

0 голосов
/ 22 августа 2009

Если вы используете методы доступа, базовая реализация может быть изменена без изменения API.

Открывая открытое поле, вы раскрываете внутреннее содержимое того, как эти данные хранятся. Вместо этого, использование открытого свойства позволяет вам более гибко изменять способ внутреннего хранения данных и не нарушать общедоступный интерфейс.

В C # 3.0 и новее реализовано автоматически свойства делают объявление свойства более лаконично, когда нет дополнительной логики требуется в свойствах доступа. Они также позволяют клиентскому коду создавать объекты Когда вы объявляете свойство как показано в следующем примере, компилятор создает приват, аноним поле доступа может быть доступно только через собственность получить и установить аксессоры.

Автоматически реализованные свойства

Например:

// Auto-Impl Properties for trivial get and set
public string Name { get; set; }
public int CustomerID { get; set; }
...