Модульное тестирование с использованием 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? Какая сборка называется в вашем классе? Похоже, что-то подозрительное происходит.

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