0

コード内の特定のディクショナリで単体テストを実行し、データベースにあるとは思わない値 (この場合は key=1) を取得しようとしています。

私は次のコードを書きました:

    Try
        Dim s As String = myDict(1)
    Catch ex As KeyNotFoundException
        Assert.AreEqual("The given key was not present in the dictionary.", ex.Message)
    Catch ex As Exception
        Assert.Fail()
        Throw
    End Try

これは正常に動作しますが、コード分析では、「Dim s as String」宣言について不平を言っています。これは、s が何にも使用されないことを示しているためです。私はこれが例外をスローするつもりであり、 s は無関係であるため、これは意図的なものです。

ただし、コードから s を削除する方法が見つからないようです。割り当てを削除するだけです:

    Try
        myDict(1)
    Catch ex As KeyNotFoundException
        Assert.AreEqual("The given key was not present in the dictionary.", ex.Message)
    Catch ex As Exception
        Assert.Fail()
        Throw
    End Try

コンパイルに失敗するようになりました。これを行う方法に関する提案はありますか?

4

3 に答える 3

1

残念ながら、型付きコードでこれを修正する方法は実際にはありません。呼び出しmyDict(1)はインデクサーであり、ステートメントとしては合法ではありません (C# でも違法です)。これをテストするには、法的声明の一部としてこの式を使用する必要があります。

これを実現する 1 つの方法は、値をパラメーターとして、それを使用しないメソッドに渡すことです。

Sub Unused(ByVal o As Object)

End Sub

...

Unused(myDict(1))
于 2012-03-20T16:09:44.850 に答える
0

s変数を使用する辞書呼び出しの後に行を置くことでこれを行うことができるようです。

    Try
        Dim s As String = theDocumentsWithUserNameDictDto.Dict(1)
        Assert.Fail("Found unexpected value for dictionary key 1: " & s)
    Catch ex As KeyNotFoundException
        Assert.AreEqual("The given key was not present in the dictionary.", ex.Message)
    End Try

(テストに合格した場合)変数が使用されることはまだ期待していませんが、何らかの理由でテストが失敗した場合に、ユーザーにさらに明確にするという利点があります。

于 2012-03-20T16:51:30.247 に答える
0

NUnitFrameworkを使用している場合

次のコードを使用できます

  Dim f As Func(Of Integer, String) = Function(i) myDict.Item(i)
  Dim a As TestDelegate = Function() f(1)
  Dim ex As KeyNotFoundException = Assert.Throws(Of KeyNotFoundException)(a)
  Assert.AreEqual("The given key was not present in the dictionary.", ex.Message)

これは、JaredParによって提案された同様のソリューションです。

別のオプションは、テストで値を返し、ExpectedException属性を使用して、コードが次のようになるようにすることです。

<TestCase(New Object(0  - 1) {}, Result:=Nothing), ExpectedException(GetType(KeyNotFoundException), ExpectedMessage:="The given key was not present in the dictionary."), Test> _
Public Function MyTest() As String
  Return myDict.Item(1)
End Function
于 2012-03-20T16:52:57.137 に答える