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

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

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 ответ

Решение

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

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

  1. Создайте себе новый CONFIG для компиляции под названием "Тесты" (здесь вы можете выбрать "Release"/ ​​"Debug");
  2. Создайте новую папку с именем "Тесты" в вашем проекте;
  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", вы не получите этот класс в режиме "Debug" или "Release". Этот класс даже не будет частью библиотеки, так как он не загрязняет вашу библиотеку без необходимости, и это в любом случае позволяет вам протестировать класс Friend.

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

Другие вопросы по тегам