Как использовать отражение для модульного тестирования внутреннего (Friend in VB) класса в сборке, когда InternalsVisibleToAttribute не является опцией? - PullRequest
2 голосов
/ 26 августа 2010

У меня есть решение с двумя проектами в пределах:

Company.Project.vbproj
Company.Project.Tests.vbproj

В сборке Company.Project.vbproj у меня есть класс FriendClass.vb, область действия которого Friend (internal in C#).

Теперь я хочу проверить это FriendClass.vb из сборки Company.Project.Tests.vbproj. Я знаю о InternalsVisibleToAttribute, но это не вариант в Visual Basic .NET 2.0, поскольку он доступен только в C #, в .NET 2.0 ( см. Здесь ).

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

Любая идея или известные методы для этого?

Заранее спасибо! =) * * Один тысяча двадцать-шесть

1 Ответ

1 голос
/ 23 сентября 2010

Единственный найденный мной обходной путь - это тот, который использовался в .NET Framework 1.1.

Поскольку InternalsVisibleToAttribute не применим в .NET 2.0 Visual Basic, единственный найденный мной обходной путь - этовключить мои тесты в тот же проект, что и моя библиотека.Кроме того, необходимо проделать некоторую дальнейшую работу.

  1. Создайте себе новый CONFIG для компиляции под названием «Тесты» (здесь вы можете выбрать «Release» / ​​«Debug»);
  2. Создайте новую папку с именем «Tests» в своем проекте;
  3. Добавьте новый класс, который будет проверять членов Friend (внутренний в C #);
  4. Первая строка кода в этом класседолжно быть: #if CONFIG = "Tests" then ... #end if;
  5. Поместите свой код между этой директивой IF компилятора.

Например, если у меня есть следующий класс Friend:

Friend Class MyFactory
    Friend Property Property1 As Object
        Get
            Return _field1
        End Get
        Set (ByVal value As Object)
            _field1 = value
        End Set
    End Property

    Friend Sub SomeSub(ByVal param1 As Object)
        ' Processing here...
    End Sub
End Class

Затем, если вы хотите протестировать этот класс в .NET 2.0 Visual Basic, вам нужно будет создать тестовый класс в том же проекте, где находится класс MyFactory.Этот класс должен выглядеть следующим образом:

#If CONFIG = "Tests" Then

    Imports NUnit.Framework

    <TestFixture()> _
    Public Class MyFactoryTests
        <Test()> _
        Public Sub SettingProperty1Test
            ' Doing test here...
        End Sub
    End Class

#End If

Поскольку у вас есть директива компилятора, указывающая компилятору компилировать и включать этот класс только при выборе CONFIG «Tests», вы не получите этот класс«Отладка» или в режиме «Выпуск».Этот класс даже не будет частью библиотеки, поскольку он не загрязняет вашу библиотеку без необходимости, и это в любом случае позволяет вам протестировать класс Friend.

Это самый умный способ, который я нашел, чтобы обойти эту проблемув Visual Basic .NET 2.0.

...