Сделайте метод общедоступным для конфигурации сборки UNITTESTS - PullRequest
1 голос
/ 29 декабря 2010

Я работаю над юнит-тестами для моего проекта. DLL с бизнес-логикой должна быть построена для .Net 2.0, но я бы хотел использовать Moq для тестирования (требуется .Net 3.5) Поэтому я перенес все тесты в отдельный проект .Net 3.5 со ссылкой на проект бизнес-логики. Мне нужно протестировать некоторые методы, помеченные как внутренние из моего тестового проекта. Я вижу единственный способ сделать это, используя отдельные конфигурации сборки с условными символами сборки:

#if UNITTESTS
public
#else
internal
#endif
int DoSomeAction(int param1, int param2) 
{
    // some logic that need to be tested here
}

но такой код выглядит некрасиво. Может быть, есть какой-то лучший способ, например метод mark с помощью специального атрибута:

[ConditionalPublic("UNITTESTS")]
internal int DoSomeAction(int param1, int param2) 
{
    // some logic that need to be tested here
}

Спасибо.

Ответы [ 2 ]

7 голосов
/ 29 декабря 2010

Вы можете добавить атрибут

[assembly: InternalsVisibleTo("ProjectName.Tests")]

(он получен из System.Runtime.CompilerServices) в ваш проект assembly.cs.Теперь ваш тестовый проект может получить доступ к внутренним компонентам.

HTH

0 голосов
/ 29 декабря 2010

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...