Как использовать отражение для модульного тестирования внутреннего класса (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, единственный найденный мной обходной путь - включить мои тесты в тот же проект, что и моя библиотека. Кроме того, необходимо проделать дополнительную работу.
- Создайте себе новый CONFIG для компиляции под названием "Тесты" (здесь вы можете выбрать "Release"/ "Debug");
- Создайте новую папку с именем "Тесты" в вашем проекте;
- Добавьте новый класс, который будет проверять членов вашего Friend (внутренний в C#);
- Первая строка кода в этом классе должна быть:
#if CONFIG = "Tests" then ... #end if
; - Поместите ваш код между этой директивой 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.