2012-03-20 59 views
0

我希望对代码中的特定字典运行单元测试,尝试获取我不希望存在于数据库中的值(在本例中,key = 1 )。如何在未指定字典值的情况下单元测试KeyNotFoundException

我写了下面的代码:

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 

,工作正常,但代码分析是抱怨“点心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 

现在无法编译。有关如何做到这一点的任何建议?

回答

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 

我还是不希望使用的变量(如果测试通过),但是这确实有向用户提供额外的清晰度的好处,如果这项测试并不能出于某种原因。

1

不幸的是,真的没有办法解决这种类型的代码。调用myDict(1)是一个索引器,它作为一个语句不合法(在C#中也是非法的)。为了测试这个,你需要使用这个表达式作为法律声明的一部分。做到这一点

一种方式是通过值作为参数的方法不使用它

Sub Unused(ByVal o As Object) 

End Sub 

... 

Unused(myDict(1)) 
+0

不幸的是,这只是进一步向下游移动警告:我现在变得“RealDataContextTest.Unused(Object)'的参数'o'从不使用”:) – 2012-03-20 16:39:53

+1

@ bobsmith833你使用了什么工具?编译器不应该发出这个警告。无论哪种方式,我只是把这个警告标记为压制在这个方法上。让它成为默认的“我明确不想使用这个”方法 – JaredPar 2012-03-20 16:46:44

+0

这只是标准的代码分析,但我已将它设置为“Microsoft All Rules”。正如你所说,这可能是矫枉过正,但有兴趣看看是否有一个简单的方法来消除这种情况。 – 2012-03-20 16:49:01

0

如果您使用NUnit的框架比

,你可以使用下面的代码

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 
相关问题