3

在我最近的问题中:单元测试最佳实践?/ C# InternalsVisibleTo() 属性在测试时用于 VBNET 2.0?,我在问 InternalsVisibleToAttribute。

我已阅读有关如何使用它的文档,一切都很好并且可以理解。但是,我无法从我的测试项目中实例化我的类 Groupe。

我希望能够从我的测试程序集中实例化我的包装程序集中的内部类。

任何帮助表示赞赏!

编辑#1

这是我尝试实例化类型时遇到的编译时错误:

Erreur 2 'Carra.Exemples.Blocs.ActiveDirectory.Groupe' n'est pas access dans ce contexte, car il est 'Private'。C:\Open\Projects\Exemples\Src\Carra.Exemples.Blocs.ActiveDirectory\Carra.Exemples.Blocs.ActiveDirectory.Tests\GroupeTests.vb 9 18 Carra.Exemples.Blocs.ActiveDirectory.Tests

(这表示我的类型在这种情况下不可访问,因为它是私有的。)但它是 Friend(内部的)!

编辑#2

下面是为实现公共接口 IGroupe 的 Groupe 类建议的一段代码:

#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

该死!我刚刚注意到我没有在我的导入区域导入程序集。

不,没有解决任何问题=(

谢谢!

4

3 回答 3

3

它应该已经工作了。InternalsVisibleTo 使程序集的所有内部成员可见 - 包括内部类型。

当您尝试从测试项目中实例化您的类时会发生什么?

编辑:构造函数本身是朋友/内部的吗?您不仅需要访问类型 - 您还需要访问构造函数。诚然,这看起来不是编译器错误的问题,但我不确定。

其他要检查的事项:

  • 是否为这对程序集中InternalsVisibleTo的其他内部成员为您工作?会不会是你没有正确申请?InternalsVisibleTo
  • 私有类型中是否Groupe有嵌套类型?这将解释问题。

如果这些都没有帮助,那么如果您可以发布一个非常简短但无法工作的完整示例,那就太好了 - 只是一个程序集中的 Friend 类型(以及 InternalsVisibleTo 属性)和另一段尝试使用它的代码.

于 2010-05-13T14:35:06.207 回答
3

研究研究了,还在研究,猜猜怎么着?再次研究,我发现了一个链接,据说“InternalsVisibleTo”不适用于 VB.NET,我认为该属性在 .NET 2.0 中可用。这是有问题的链接:

InternalsVisibleTo:在 .Net 2.0 中测试内部方法

备注指出:

在 .NET Framework 2.0 版中,Visual Basic 不支持使用此属性。

所以它不可用,仅此而已!=)

于 2010-05-14T14:11:34.767 回答
0

你的测试程序集叫Carra.Exemples.Blocs.ActiveDirectory.Tests什么?

你已经进口了Carra.Exemples.Blocs.ActiveDirectory.Tests,但你肯定应该只是进口Carra.Exemples.Blocs.ActiveDirectory吗?您的班级所在的程序集是什么?似乎发生了什么可疑的事情。

于 2010-05-13T15:01:53.110 回答