3

私の最近の質問:ユニット テストのベスト プラクティス? / テスト中の VBNET 2.0 の C# InternalsVisibleTo() 属性? 、InternalsVisibleToAttribute について質問していました。

使用方法に関するドキュメントを読みましたが、すべて問題なく理解できました。ただし、テスト プロジェクトからクラス Groupe をインスタンス化できません。

テスト アセンブリから、ラッパー アセンブリで内部クラスをインスタンス化できるようにしたいと考えています。

どんな助けでも大歓迎です!

編集#1

型をインスタンス化しようとしたときに発生するコンパイル時エラーは次のとおりです

Erreur 2 'Carra.Exemples.Blocs.ActiveDirectory.Groupe' n'est pas accessed 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

以下は、Public インターフェイス 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

調査して調査した後、まだ調査して何を推測しますか?もう一度調べてみると、属性が.NET 2.0で利用可能であると考えられていたため、「InternalsVisibleTo」はVB.NETでは利用できなかったというリンクが見つかりました。問題のリンクは次のとおりです。

InternalsVisibleTo:.Net2.0での内部メソッドのテスト

備考は次のように述べています。

.NET Frameworkバージョン2.0では、VisualBasicはこの属性の使用をサポートしていません。

だからそれは利用できません、それだけです!=)

于 2010-05-14T14:11:34.767 に答える
3

それはすでに動作するはずです。InternalsVisibleTo は、内部型を含む、アセンブリのすべての内部メンバーを表示します。

テスト プロジェクトからクラスをインスタンス化しようとするとどうなりますか?

編集:コンストラクタ自体はフレンド/内部ですか? 型へのアクセスだけでなく、コンストラクターへのアクセスも必要です。確かに、それはコンパイラ エラーの問題ではないように見えますが、よくわかりません。

その他の確認事項:

  • このアセンブリのペアのInternalsVisibleTo他の内部メンバーのために働いていますか? ちゃんと申請してないだけじゃないの?InternalsVisibleTo
  • ネストされた型はGroupeプライベート型の中にありますか? それは問題を説明するでしょう。

これらが役に立たない場合は、機能しない非常に短いが完全な例を投稿できれば良いでしょう.1つのアセンブリの Friend タイプ (InternalsVisibleTo 属性と共に) と、それを使用しようとする別のコード片だけです。 .

于 2010-05-13T14:35:06.207 に答える
0

テスト アセンブリは と呼ばれていCarra.Exemples.Blocs.ActiveDirectory.Testsますか?

をインポートCarra.Exemples.Blocs.ActiveDirectory.Testsしましたが、インポートするだけでよいのCarra.Exemples.Blocs.ActiveDirectoryでしょうか? あなたのクラスが呼び出されているアセンブリは何ですか? 何か怪しいことが起こっているようです。

于 2010-05-13T15:01:53.110 に答える