Модульное тестирование с использованием InternalsVisibleToAttribute требует компиляции с /out:filename.ext?
В моем последнем вопросе: Лучшая практика модульного тестирования? / C# InternalsVisibleTo () атрибут для VBNET 2.0 во время тестирования? Я спрашивал про InternalsVisibleToAttribute.
Я прочитал документацию о том, как его использовать, и все хорошо и понятно. Тем не менее, я не могу создать экземпляр класса Groupe из моего проекта Testing.
Я хочу иметь возможность создания своего внутреннего класса в моей сборке-обертке из моей тестовой сборки.
Любая помощь приветствуется!
РЕДАКТИРОВАТЬ #1
Вот ошибка времени компиляции, которую я получаю, когда пытаюсь создать экземпляр моего типа:
Erreur 2 'Carra.Exemples.Blocs.ActiveDirectory.Groupe' n'est pas доступный без контекста, автомобиль 'Private'. C: \ Open \ Projects \ Exemples \ Src \ Carra.Exemples.Blocs.ActiveDirectory \ Carra.Exemples.Blocs.ActiveDirectory.Tests \ GroupeTests.vb 9 18 Carra.Exemples.Blocs.ActiveDirectory.Tests
(Это говорит о том, что мой тип не доступен в этом контексте, потому что он приватный.) Но это Друг (внутренний)!
РЕДАКТИРОВАТЬ № 2
Вот фрагмент кода, предложенный для класса Groupe, реализующего открытый интерфейс IGroupe:
#Region "Importations"
Imports System.DirectoryServices
Imports System.Runtime.CompilerServices
#End Region
<Assembly: InternalsVisibleTo("Carra.Exemples.Blocs.ActiveDirectory.Tests")>
Friend Class Groupe
Implements IGroupe
#Region "Membres privés"
Private _classe As String = "group"
Private _domaine As String
Private _membres As CustomSet(Of IUtilisateur)
Private _groupeNatif As DirectoryEntry
#End Region
#Region "Constructeurs"
Friend Sub New()
_membres = New CustomSet(Of IUtilisateur)()
_groupeNatif = New DirectoryEntry()
End Sub
Friend Sub New(ByVal domaine As String)
If (String.IsNullOrEmpty(domaine)) Then Throw New ArgumentNullException()
_domaine = domaine
_membres = New CustomSet(Of IUtilisateur)()
_groupeNatif = New DirectoryEntry(domaine)
End Sub
Friend Sub New(ByVal groupeNatif As DirectoryEntry)
_groupeNatif = groupeNatif
_domaine = _groupeNatif.Path
_membres = New CustomSet(Of IUtilisateur)()
End Sub
#End Region
И код пытается использовать его:
#Region "Importations"
Imports NUnit.Framework
Imports Carra.Exemples.Blocs.ActiveDirectory
#End Region
<TestFixture()> _
Public Class GroupeTests
<Test()> _
Public Sub CreerDefaut()
Dim g As Groupe = New Groupe()
Assert.IsNotNull(g)
Assert.IsInstanceOf(Groupe, g)
End Sub
End Class
РЕДАКТИРОВАТЬ № 3
Черт! Я только что заметил, что я не импортировал сборку в моем регионе импорта.
Нет, ничего не решил =(
Спасибо!
3 ответа
После исследования и исследования, все еще исследования и угадайте, что? Вновь исследуя, я нашел ссылку, где говорится, что InternalsVisibleTo не был доступен для VB.NET, хотя атрибут был доступен в.NET 2.0. Вот ссылка на вопрос:
InternalsVisibleTo: тестирование внутренних методов в.Net 2.0
Замечание гласит:
В.NET Framework версии 2.0 Visual Basic не поддерживает использование этого атрибута.
Так что это недоступно, вот и все! знак равно
Это должно работать уже. InternalsVisibleTo делает видимыми все внутренние элементы сборки, включая внутренние типы.
Что происходит, когда вы пытаетесь создать экземпляр своего класса из тестового проекта?
РЕДАКТИРОВАТЬ: Является ли сам конструктор Друг / внутренний? Вам нужен не только доступ к типу - вам также нужен доступ к конструктору. По общему признанию это не похоже, что это - проблема от ошибки компилятора, но я не уверен.
Другие вещи, чтобы проверить:
- Является
InternalsVisibleTo
работаешь на других внутренних членов в этой паре сборок? Может быть, вы просто не подали заявку?InternalsVisibleTo
должным образом? - Является
Groupe
вложенный тип внутри частного типа? Это объяснило бы проблему.
Если это не поможет, было бы хорошо, если бы вы могли опубликовать очень короткий, но полный пример, который не работает - просто тип Friend в одной сборке (вместе с атрибутом InternalsVisibleTo) и другой фрагмент кода, который пытается его использовать.,
Ваша тестовая сборка называется Carra.Exemples.Blocs.ActiveDirectory.Tests
?
вы импортировали Carra.Exemples.Blocs.ActiveDirectory.Tests
, но, конечно, вы должны просто импортировать Carra.Exemples.Blocs.ActiveDirectory
? Какая сборка называется в вашем классе? Похоже, что-то подозрительное происходит.