2

次の2つのプロジェクトで解決策があります。

Company.Project.vbproj
Company.Project.Tests.vbproj

Company.Project.vbprojアセンブリ内に、FriendClass.vbスコープがであるクラスがありますFriend (internal in C#)

ここで、アセンブリFriendClass.vb内からこれをテストしたいと思います。Company.Project.Tests.vbprojについては知っていInternalsVisibleToAttributeますが、.NET 2.0ではC#でのみ使用できるため、Visual Basic .NET 2.0ではオプションではありません(ここを参照)。

テストアセンブリ内からこの内部FriendClassを使用してプロキシクラスを作成し、インスタンス化してそれに応じてテストを実行できるようにしたいと思います。

そうするためのアイデアや既知の慣行はありますか?

前もって感謝します!=)

4

1 に答える 1

1

私が見つけた唯一の回避策は、.NETFramework1.1で使用されていたものです。

InternalsVisibleToAttribute.NET2.0Visual Basicでは使用できないため、私が見つけた唯一の回避策は、ライブラリ自体と同じプロジェクト内にテストを含めることです。その上、いくつかのさらなる作業を達成する必要があります。

  1. 「テスト」と呼ばれる新しいコンパイルCONFIGを自分で作成します(ここで「リリース」/「デバッグ」を選択できます)。
  2. プロジェクト内に「Tests」という名前の新しいフォルダを作成します。
  3. フレンド(C#の内部)メンバーをテストするための新しいクラスを追加します。
  4. このクラス内のコードの最初の行は次のようになります#if CONFIG = "Tests" then ... #end if
  5. このコンパイラ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が選択されている場合にのみコンパイルしてこのクラスを含めるようにコンパイラに指示するコンパイラ指令があるため、「デバッグ」モードまたは「リリース」モードではこのクラスを取得できません。このクラスはライブラリの一部ではありません。これは、ライブラリを不必要に汚染しないためです。これにより、とにかくFriendクラスをテストできます。

これは、Visual Basic.NET2.0でこの問題を回避するために私が見つけた最も賢い方法です。

于 2010-09-23T17:51:56.593 に答える